你是否正在寻找关于notifyicondata的内容?让我把最完整的东西奉献给你:
最近初接触MFC,是为了实现一个传感网络的上位机。
在实现托盘提示时,在网上搜索了不少资料,但已经翻译的资料都比较老。
在查看原版的MSDN后,发现notifyicondata这个结构中有几项新特性,可以实现比较新的托盘/气泡特性。
例如:气泡操作响应(想想MSN的单击气泡关闭提示?)、隐藏图标|显示图标(不通过删除)、自定义大Balloon Tip图标等,还是比较吸引人的。
但是,实现这些功能的同时,需要一些额外的代码来提高程序的兼容性。
我把自己摸索的一些结果总结出来吧:
在VS2008+MFC+XP和WIN7 64bit下进行测试通过。
先贴下notifyicondata结构。
以下挑出几个不同的地方,一一做说明。
cbSize
网上通常的做法是
DllGetVersion并不是一个API,具体的使用方法,请参看我另一篇博文《正确使用DllGetVersion》。
Shell32.dll VersioncbSize
6.0.6 or higher (WindowsVista and later) sizeof(notifyicondata)
6.0 (WindowsXP) notifyicondata_V3_SIZE
5.0 (Windows 2000) notifyicondata_V2_SIZE
Versions lower than 5.0 notifyicondata_V1_SIZE
请注意,cbSize中的长度不对时,会直接影响托盘图标能否显示,以及特性是否正常。
uFlags
新特性:
NIF_GUID
NIF_REALTIME
NIF_SHOWTIP
uCallbackMessage
hIcon
szTip
uTimeout
uVersion
这是一个比较关键的值
才能实现版本的更改。
dwInfoFlags
新特性:
NIIF_USER
NIIF_LARGE_ICON
NIIF_RESPECT_QUIET_TIME
guidItem
XP和之后系统的特性
hBalloonIcon
以上就是notifyicondata的一些新特性,以2010年12月11日官方英文MSDN为原版的翻译与一些自己的提示。
需注意的是,在网上许多资料对气泡不弹出的解决办法,都是对以下的宏定义进行修改:
若是按其更改为0x0501之后,类似 NOTIFYICON_VERSION_4,hBalloonIcon等这些6.0版本的宏定义与成员是不可直接使用的。
其实,这种解决办法是错误的,请设置该值为默认值。
气泡不能正常显示,正是上文提及的cbSize的值设置不正确所导致的。
因为在该宏定义为0x0600时,NOTIFYICONDATA结构声明为上文中贴出的结构,而笼统使用sizeof获取的大小,亦为这个大小。但在XP中运行时,Shell32.dll版本较低,notifyicondata中类似hBalloonicon等成员不存在,长度不一致,从而导致托盘异常,气泡无法正常显示。为了正常显示托盘气泡,一定要设置正确的cbSize值。
下面给出一个CallbackMessage的函数例子,用于NOTIFYICON_VERSION_4时的消息处理,可以实现气泡单击,关闭之类的消息处理,。
再给出一个简单的大图标Balloon Tip例子:
另外,可能有人不知道如何立即关闭BalloonTip,只要令szInfo的内容为空,再修改图标,就可以立即关闭提示。
最后再提醒一点,使用了新特性的程序,很可能在XP下无法使用。所以,想让自己的程序拥有美丽的外观的同时,又能在XP下正常运行,一定要善用上文提及的函数判断shell32.dll版本之后,再配置notifyicondata结构体。
虽然大图标提示很美观,但也不要滥用提示,除非是自用的,不然用户很可能彻底告别你的程序!
若是有帮助,留个言支持下,我会继续写一些个人的经验与大家分享~
欢迎留言交流问题与经验~若是有错误,还请指正!
以上就是关于notifyicondata的全部内容,相信你一定会非常满意。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shenmilingyu/article-6351-1.html
你已经迷失自己
真想开打就是误国呢
航行自由只是美国霸权的一种借口