|
안녕하세요.. 제가 요즘 터치 스크린을 위한 프로그램을 하는데요..
메뉴가 넘넘 작아서 터치를 하기가 불편하네요..
메뉴의 크기나 폰트의 크기를 변경할 수 없을까요?
검색하다보니 아래와 같은 소스가 있어 사용해 보았는데 크기나 폰트가 변함이 없네요..
BEGIN_MESSAGE_MAP은 헤더파일 class TMainForm : public TForm{} 안에 선언하는 것은 맞는지요..
혹시 메뉴의 크기나 폰트를 변경해보신 고수님들은 답변 부탁드립니다..
//in header...
void __fastcall WMDraw(TMessage &Msg);
void __fastcall WMMeasure(TMessage &Msg);
BEGIN_MESSAGE_MAP
MESSAGE_HANDLER(WM_DRAWITEM, TMessage, WMDraw)
MESSAGE_HANDLER(WM_MEASUREITEM, TMessage, WMMeasure)
END_MESSAGE_MAP(TForm)
//in source...
__fastcall TMainForm::TMainForm(TComponent *Owner)
: TForm(Owner)
{
TMenuItemInfo ItemInfo;
ItemInfo.cbSize = sizeof(TMenuItemInfo);
ItemInfo.fMask = MIIM_TYPE;
for(int index = 0; index<Menu->Items->Count; index++)
{
GetMenuItemInfo(Menu->Handle, index, true, &ItemInfo);
ItemInfo.fType = ItemInfo.fType|MFT_OWNERDRAW;
ItemInfo.dwTypeData = Menu->Items->Items[index]->Caption.c_str();
ItemInfo.cch = Menu->Items->Items[index]->Caption.Length()+1;
SetMenuItemInfo(Menu->Handle, index, true, &ItemInfo);
for(int index2=0; index2<Menu->Items->Items[index]->Count; index2++)
{
GetMenuItemInfo(Menu->Items->Items[index]->Handle, index2, true, &ItemInfo);
ItemInfo.fType = ItemInfo.fType|MFT_OWNERDRAW;
ItemInfo.dwTypeData = Menu->Items->Items[index]->Items[index2]->Caption.c_str();
ItemInfo.cch = Menu->Items->Items[index]->Items[index2]->Caption.Length();
SetMenuItemInfo(Menu->Items->Items[index]->Handle, index2, true, &ItemInfo);
}
}
}
//---------------------------------------------------------------------------
/*
void __fastcall TMainForm::Test1Measure(TMessage &Msg)
{
LPMEASUREITEMSTRUCT lpmis = (MEASUREITEMSTRUCT*)Msg.LParam;
//void __fastcall Test1MeasureItem(TObject *Sender, TCanvas *ACanvas,
// int &Width, int &Height);
int Index = lpmis->itemID;
char text[100];
GetMenuString(Menu->Handle, Index, text, 100, MF_BYCOMMAND);
TFont *MenuFont = new TFont();
MenuFont->Name = "Tahoma";
MenuFont->Size = 20;
MenuFont->Style = TFontStyles()<<fsBold;
SIZE S;
HDC HMenuDC = GetDC(0);
HFONT OldFont = SelectObject(HMenuDC, MenuFont->Handle);
// get te appropriate "extents"
GetTextExtentPoint32(HMenuDC, text, strlen(text), &S);
ReleaseDC(0, HMenuDC);
// set the sizes appropriately
lpmis->itemWidth = S.cx;
lpmis->itemHeight = S.cy;
SelectObject(HMenuDC, OldFont);
Msg.Result = true;
}
//---------------------------------------------------------------------------
void __fastcall TMainForm::Test1Draw(TMessage &Msg)
{
LPDRAWITEMSTRUCT lpdis = (DRAWITEMSTRUCT*)Msg.LParam;
//void __fastcall Test1DrawItem(TObject *Sender, TCanvas *ACanvas,
// TRect &ARect, bool Selected);
if(lpdis->CtlType != ODT_MENU)
{
TForm::Dispatch(&Msg);
return;
}
int Index = lpdis->itemID;
UINT ItemState = lpdis->itemState;
HDC HMenuDC = lpdis->hDC;
RECT R = lpdis->rcItem;
// get he menu caption from the Index
char text[100];
GetMenuString(lpdis->hwndItem, Index, text, 100, MF_BYCOMMAND);
// this is new font
//////////////////////
TFont *MenuFont = new TFont();
MenuFont->Name = "Tahoma";
MenuFont->Size = 200;
MenuFont->Style = TFontStyles()<<fsBold;
//////////////////////
TBrush *MenuBrush = new TBrush();
if(ItemState & ODS_SELECTED)
{
MenuBrush->Color = clHighlight;
::SetTextColor(HMenuDC, ColorToRGB(clHighlightText));
}
else
{
MenuBrush->Color = clBtnFace;
::SetTextColor(HMenuDC, ColorToRGB(clWindowText));
}
HFONT OldFont = SelectObject(HMenuDC, MenuFont->Handle);
::SetBkMode(HMenuDC, TRANSPARENT);
::FillRect(HMenuDC, &R, MenuBrush->Handle);
::OffsetRect(&R, 2, 0);
::DrawText(HMenuDC, text, strlen(text), &R, DT_LEFT|DT_VCENTER|DT_SINGLELINE);
SelectObject(HMenuDC, OldFont);
delete MenuFont;
delete MenuBrush;
Msg.Result = true;
}
//---------------------------------------------------------------------------
*/
|