惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cloudbric
Cloudbric
WordPress大学
WordPress大学
博客园 - 叶小钗
B
Blog RSS Feed
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
Scott Helme
Scott Helme
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Hugging Face - Blog
Hugging Face - Blog
T
Threat Research - Cisco Blogs
B
Blog
V
V2EX
Simon Willison's Weblog
Simon Willison's Weblog
I
Intezer
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threatpost
Cisco Talos Blog
Cisco Talos Blog
阮一峰的网络日志
阮一峰的网络日志
C
Cybersecurity and Infrastructure Security Agency CISA
PCI Perspectives
PCI Perspectives
雷峰网
雷峰网
The Register - Security
The Register - Security
博客园 - 【当耐特】
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
Security Latest
Security Latest
NISL@THU
NISL@THU
腾讯CDC
S
SegmentFault 最新的问题
小众软件
小众软件
The GitHub Blog
The GitHub Blog
月光博客
月光博客
A
Arctic Wolf
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
IT之家
IT之家
D
DataBreaches.Net
C
CXSECURITY Database RSS Feed - CXSecurity.com
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
J
Java Code Geeks
TaoSecurity Blog
TaoSecurity Blog
P
Privacy International News Feed

博客园 - vibration

ATL3.0组件注册bug的解决方法 奇怪的引用错误及解决方法 OLE2T在VS2003中转换中文失败的问题及解决方法 标题栏按钮的WTL实现 AppBar的WTL实现 招聘C++和C#开发工程师 ATL组件中文路径注册问题(转载) 关于C++模板的连接问题 - vibration - 博客园 用窗口消息解决COM接口的多线程访问问题 用全局接口表实现COM接口在不同线程中的传递 MyMSN支持自定义内容了 悼念皮皮 上了点照片 一个测试记忆力的小游戏 老板该如何向核心员工许诺 ActiveScript SkinX界面换肤框架更新 反射获取定制Attribute Skin技术实现框架(完)
自画菜单的WM_MEASUREITEM只会发送一次
vibration · 2004-11-22 · via 博客园 - vibration

最近收到一个动态显示隐藏菜单项的需求。通常我们编程时,如果有不同场合需要使用不同的菜单,一般的做法是准备两个菜单资源,然后在需要的时候转载某一个菜单来替代先前的。这样的做法比较简单,但是如果变化很多,需要准备的菜单资源太多,对资源的消耗不能不考虑,所以也会有在代码中动态修改菜单的做法。这里用到的是插入和删除操作。

当然所谓显示和隐藏也可以用插入和删除来实现。但是我本来的想法如果能够可以实现显示和隐藏,也许比插入和删除更方便。因为是自画菜单,我就想当然的认为如果在WM_MEASUREITEM时设置菜单项的高度为0,就可以实现隐藏菜单的效果。于是用这个原理修改了代码。然而实际的效果却不是如预期的那样,经调试发现:WM_MEASUREITEM消息只发送一次,就是说,当菜单第二次显示的时候,使用的是第一次WM_MEASUREITEM消息返回的尺寸。这样,就没法动态修改了。

附带发现的问题是:自画菜单是动态计算文字所需要的宽度,以决定菜单所需要的宽度的。然而由于WM_MEASUREITEM消息只发送一次,那么如果动态修改菜单的文字,菜单宽度是不会改变的,这样很容易产生动态修改后的菜单文字被截断的问题。

发现了问题,却没有好的解决方案。看来当需要修改自画菜单时,最好的方式还是删除它,然后重新插入。

最后感慨一下,太多的想当然往往都是错的,某些解决方案看似不合理,往往是最合理的