为什么我重绘菜单时,一旦菜单项的属性是MF_POPUP时即使是MF_OWNERDRAW也不会执行void CMyMenu::MeasureItem(LPMEASUREITEMSTRUCT lpMis)函数,这是为什么(没有MF_POPUP时会执行MeasureItem函数)这样画出来的弹出式菜单的矩形大小和其他非弹出式菜单的矩形大小不一致,同一个菜单页里面的菜单项大大小小,很是难看,各位大虾,能告诉我原因吗??而且如果插入的弹出式菜单项没有设置子菜单的句柄时,大小也正常!谢谢

解决方案 »

  1.   

    弹出式菜单,当其用TrackPopupMenu()时,最后一个参数用GetParent()看看,即有主窗口来处理你的弹出菜单,试试看吧
      

  2.   

    对于mf_popup时,其每个菜单项还是需要设置mf_ownerdraw的风格的
      

  3.   

    To fengqinggao(风清高):我知道可以在void CMainFrame::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct)中设置菜单大小,但是为什么菜单的属性一旦设置为MF_POPUP|MF_OWNERDRAW时就不会执行该菜单类的MeasureItem函数,而执行CMainFrame::OnMeasureItem函数,这样使用起来不方便,而且不能随菜单内容更改菜单宽度了!
    能不能不用主窗口处理弹出菜单?为什么非弹出菜单就不需要主窗口的介入?
      

  4.   

    非弹出菜单本来就是由主窗口处理的,所以你不需要这么设置弹出菜单不在主窗口时,会失去一些功能,举一个最简单的例子,当在View中处理弹出菜单时,状态条就不能显示菜单项的提示,甚至有时候菜单项自己的状态都不能正确处理,菜单,还是在主窗口中处理比较好因我没有学过C++,所以具体也讲不很清楚,但是我知道在主窗口中处理菜单,一般都没有问题,呵呵