如题

解决方案 »

  1.   

    如何控制菜单的大小?(ZZ)
     我用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比较合适。*/ 
      

  2.   

    我是用的自绘菜单,在WM_MEASUREITEM时设高为100,菜单项的高的确变成了100,但是MenuBar的高还是以前的值,我看了几个模仿XP菜单的例子,它们的菜单也是默认的高度,而officeXP和VS.net的平板菜单比普通的菜单是要高几个像素的.
      

  3.   

    我用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比较合适。*/