Owner Draw Menu 在动态修改后文字截断的问题

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

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

 

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

贴个截图可能更清楚:

ScreenShot

 

Google了一下,发现这个:

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

 

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

 

?
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值