MFC控制CMenu菜单的大小?2015-03-06 15:49:47

( 1人已投票,[高质量] )
分享:
31.3K

MFC的CMenu生成了一个动态菜单(例如File,Edit,View…Help),想要控制这个菜单的大小(长+高).


方法一:查找 WM_MEASUREITEM 和 MEASUREITEMSTRUCT.

方法二:查询系统::GetSystemMetric(SM_CXMENUSIZE).


你可以通过如下代码来获得文本的大小

(A)获得被使用的字体

NONCLIENTMETRICS ncm;
HFONT hFontMenu;
SIZE size;
size.cy = size.cy = 0;
memset(&ncm, 0, sizeof(NONCLIENTMETRICS));
ncm.cbSize = sizeof(NONCLIENTMETRICS);
if (SystemParametersInfo(SPI_GETNONCLIENTMETRICS, sizeof(NONCLIENTMETRICS), &ncm, 0))
{
hFontMenu = CreateFontIndirect(&ncm.lfMenuFont);


(B) 获得菜单项的文本:

char szText[_MAX_PATH];
pMenu->GetMenuString(0, szText, _MAX_PATH, MF_BYPOSITION);
//然后,获得菜单项文本的高度
HFONT hFontOld;
HDC hDC;
hDC = ::GetDC(NULL);
hFontOld = (HFONT) ::SelectObject(hDC, hFontMenu);
GetTextExtentPoint32(hDC, szText, lstrlen(szText), &size);
SelectObject(hDC, hFontOld);
::ReleaseDC(NULL, hDC);
}


此时,size.cy即为高度,size.cx为宽度,你可以给菜单加上自定义的高度和宽度,通过比较,一般情况下宽度设为4比较合适。







头像

snowcoal
  • MFC
  • CMenu
  • 菜单宽高控制

收藏到我的私密空间

标题:MFC控制CMenu菜单的大小?

作者:柳岸花明

你暂未登录,请登录后才可收藏至您的私密空间 确认取消
雪炭网

键盘操作 更便捷 -雪炭网雪中送炭-乐趣无限

如果本站的内容有幸帮助到了您,建议您了解一下当页的广告内容哦,我们的进步离不开您的支持,Thank you~