最近遇到这个问题,具体现象和这里提到的差不多:
http://www.cnblogs.com/vibration/archive/2004/11/22/66904.html
简单来说就是,自绘菜单依赖一个只会在第一次popup的时候才被调用的MeasureItem来计算合理的菜单宽度/高度,导致在动态修改菜单项为比原本更长的文本时仍以旧的宽度画菜单。
贴个截图可能更清楚:
Google了一下,发现这个:
于是试了一下临时增加菜单项再删除的方法,结果证明不行,后来发现下面这个方法才可行:
1
2
3
4
5
|
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被调用
|
转自:http://www.cnblogs.com/yonken/archive/2010/03/18/Modify_Owner_Drawn_Menu_Mess_Up_Item_Text.html