我这里说的菜单是指直接显示在框架中的文字,而不是点击后出现的弹出菜单。在框架中绘图可以直接用GetWindowDC得到DC指针后进行,但在框架上无法确定每个菜单(文件、编辑、查看等)的位置,请做过的朋友指点一二。

解决方案 »

  1.   

    BOOL GetMenuBarInfo(
      HWND hwnd,         // handle to window
      LONG idObject,     // menu object
      LONG idItem,       // item identifier
      PMENUBARINFO pmbi  // information
    );
      

  2.   

    to goodboyws(深夜不眠者):在代码中加入GetMenuBarInfo函数及MENUBARINFO,编译时提示未定义,加上Windows.h和WinUser.h也不行。另外,在框架上绘图发现,当鼠标移到菜单上,菜单会重新绘图,覆盖原来框架上的图形,这个问题怎么解决?在菜单上绘图有没有专门的消息处理?
      

  3.   

    1.
    #define WINVER 0x0500
      

  4.   

    我的操作系统是Win2000,这该怎么办?重载了WM_NCPAINT,调试的时候发现当鼠标点击菜单出现弹出菜单后,无法在框架的菜单上绘图,没有弹出菜单时可以绘图。
      

  5.   

    用Skin++界面换肤控件就能很容易地实现
    http://www.uipower.com/productdown/productdown.asp?lb=Visual+C%2B%2B+%B0%E6
      

  6.   

    GetMenuInfo使用不了是版本问题  看lib文件可以知道 5.0以后的都可以直接用 你要用可以这样做:
    typedef BOOL (WINAPI* FtGetMenuInfo) (HMENU,LPCMENUINFO);
    BOOL GetMenuInfo(HMENU hMenu,LPCMENUINFO lpInfo)
    {
    HMODULE hModule = ::LoadLibrary("user32.dll");
    if(hModule)
    {
    void* pVoid = (void*)GetProcAddress(hModule,"GetMenuInfo");
    if(pVoid)
    {
    ((FtGetMenuInfo)pVoid)(hMenu,lpInfo);
    }
    else
    {
    ::FreeLibrary(hModule);
    return false;
    }
    }
    ::FreeLibrary(hModule);
    return true;
    }要解决你菜单的问题 最好还是自己做个菜单来重画
      

  7.   

    使用GetMenuInfo和SetMenuInfo这两个函数解决了。