vc2008气泡弹不出郁闷,高人指点

来源:百度知道 编辑:UC知道 时间:2024/07/09 00:38:00
vc 6.0以后版本的托盘气泡弹不出,但是以前6.0版本同样的方法能实现.
//前面的省略.............
_tcscpy(m_nid.szInfoTitle,"提醒你");
_tcscpy(m_nid.szInfo,"内容已改变");
m_nid.uTimeout=1000;//这个时间过后,气球自动消失(好像不启作用)
m_nid.uVersion=NOTIFYICON_VERSION;
Shell_NotifyIcon(NIM_MODIFY,&m_nid);
pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//该结构体大小
pnid.hWnd=m_hWnd; //窗口句柄
pnid.uID= (UINT)m_hIcon; //图标句柄
pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO ; //图标有效|自定义消息有效|鼠标指向显示文字有效
pnid.uCallbackMessage=WM_MYMESSAGE;//自定义的消息名称
pnid.dwInfoFlags=NIIF_INFO;//NIN_BALLOONSHOW;
pnid.uTimeout=1000 ;
pnid.hIcon=m_hIcon; //图标句柄
_tcscpy(pnid.szTip,_T("快易"));//鼠标指向所显示的文字
_tcscpy(pnid.szInfo, _T("O(∩_∩)O哈哈~"));
_tcscpy(pnid.szInfoTitle,_T("提示"));
Shell_NotifyIcon(NIM_ADD,&pnid);

在NOTIFYICONDATA.uFlags中的标志之一是NIF_TIP,用它来设置传统的信息提示,即鼠标要移动到图标上。新的标志NIF_INFO(由于_WIN32_IE >= 0x0500条件定义,因此在编译时,请注意包含最新版本的头文件shellapi.h,并保证链接最新版本的库文件shell32.lib,分发程序时用最新版本的运行时动态链接库shell32.dll)便是为显示气球提示所用的。也就是说,要显示气球提示,那么在调用Shell_NotifyIcon函数时必须用NIF_INFO标志。

在Windows XP中,只要你的托盘程序拥有焦点,气球提示便不会超时。显然,你只有转到其它应用程序,才能启动计时器。在Windows 2000里好像没有这个问题。

写成这样:cbSize=NOTIFYICONDATA_V3_SIZE
而不是:cbSize=sizeof(NOTIFYICONDATA).
据说msdn上有写,可是我的2008的没有写清楚,或者我没有找到。