我想对自己的整个弹出菜单进行重新绘制,想使用API 函数::GetWindowRect(HWND hWnd,LPRECT lpRect)得到菜单的尺寸大小,而不是菜单项(MenuItem),需要得到
hWnd,但是我不知道怎样得到此句柄,
如果你知道请告诉我,100满分相送…………

解决方案 »

  1.   

    GetSafeHwnd();要重画的话,在DrawItem(...)里面进行,详细的看看DrawItem的参数。
      

  2.   

    菜单的尺寸?自己画就自己定吧!HMENU不是窗口,TrackPopupMenu才会根据HMENU创建窗口。你是要自己做一个TrackPopupMenu吧?
      

  3.   

    在DrawItem中使用DRAWITEMSTRUCT中的成员数据rcItem和hwndItem都是菜单项的数据,
    而我想得到的是整个弹出菜单的句柄。
      

  4.   

    请参阅BCG类库的NOTEPAD例子,里面有详细的代码。在主菜单上弹出的那个颜色菜单比WORD做得还要好。
      

  5.   

    注意:HMENU hMenu=GetSafeHmenu( )后再用强制类型转换(HWND hMenu
      

  6.   

    那还不如自己做一个Dialog来模拟Menu
    不过我这里有个example,你要的话给我email
      

  7.   

    楼上的兄弟!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    给我一份!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    [email protected]
    http://expert.csdn.net/Expert/topic/1680/1680180.xml?temp=.7069971
    进入这个网址给你份。
      

  8.   

    nonocast(如果你信仰光明,那是因为到处都是黑暗!) 老师:
    给我一份,我的MAIL:[email protected]
      

  9.   

    我使用了(HWND)CMenu::GetSafeHmenu()可是在调用::GetWindowRect(HWND hWnd,LPRECT lpRect)函数使用该句柄的时候还是没能得到整个菜单的巨型边框尺寸,即不能得到我所需要的lpRect
      

  10.   

    CMenu不是从CWnd派生,当然无从谈起hWnd,你说的是要菜单自绘制,从cmenu派生,重载drawitem,要具体的例子我可以发给你
      

  11.   

    其实我自己有很多关于菜单的例子,像实现VC++6。0中那种风格的彩旦我自己已经实现,现在我就是想自己完成一个XP风格的菜单,在实现绘制整个弹出菜单的边框时需要得到
    整个菜单的句柄。我也看了别人写的XP风格的程序代码,可是写的太烦琐,我想进行一下简化
      

  12.   

    CMenu popupmenu;
    popupmenu.LoadMenu(IDR_POPUPMENU);
    CMenu* popup = popupmenu.GetSubMenu(0);可以得到一个CMenu的对象,再想要它的句柄应该不难吧。
    希望上面的代码对你有用:)
      

  13.   


    昨天看了一段用 API 写的菜单,它的窗口创建大致如下:
    (以“文件”菜单为例)当点文件菜单时,在响应的消息中根据文件菜单的项数计算要创建窗口的尺寸,再创建窗口,然后画菜单项,显示,当选择或点别的地方时销毁此窗口。这样的话,你可不可以自己创建一个窗口画菜单项,自己响应消息。(工作量可能大一些)
      

  14.   

    shadowac(走向黑暗)说的是正确办法。
      

  15.   

    感谢shadowac(走向黑暗)给我的工程代码。100分相送希望其他给我建议的朋友能继续支持我我的问题都是100分满分相送的欢迎大家在今后见到我发的帖子中解答我的问题