Coding Life

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

最近遇到这个问题,具体现象和这里提到的差不多:

http://www.cnblogs.com/vibration/archive/2004/11/22/66904.html

 

简单来说就是,自绘菜单依赖一个只会在第一次popup的时候才被调用的MeasureItem来计算合理的菜单宽度/高度,导致在动态修改菜单项为比原本更长的文本时仍以旧的宽度画菜单。

贴个截图可能更清楚:

ScreenShot

 

Google了一下,发现这个:

http://www.eggheadcafe.com/forumarchives/NETFrameworkNETWindowsFormscontrols/Oct2005/post24408815.asp

 

于是试了一下临时增加菜单项再删除的方法,结果证明不行,后来发现下面这个方法才可行:

 

MENUITEMINFO menuItemInfo = {0};
...
pMenu->GetMenuItemInfo(nMenuIndex, &menuItemInfo, TRUE);	// 拿ItemInfo,以免后面SetMenuItemInfo冲掉fType里面的MFT_OWNERDRAW标记
pMenu->ModifyMenu(nMenuIndex, MF_BYPOSITION, pMenu->GetMenuItemID(nMenuIndex), lpcszMenuText);
::SetMenuItemInfo(pMenu->GetSafeHmenu(), nMenuIndex, TRUE, &menuItemInfo);	// 使得MeasureItem被调用
posted on 2010-03-18 13:41  yonken  阅读(950)  评论(4编辑  收藏  举报