首先通过创建了系统托盘
//创建系统托盘
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uTimeout = 20000;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO;
nid.uCallbackMessage = WM_USER;
nid.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_XEYE));
lstrcpy(nid.szTip, "SysInfor");
Shell_NotifyIcon(NIM_ADD, &nid);然后显示了一个气泡nid.dwInfoFlags = NIIF_INFO;
//复制内容
lstrcpy(nid.szInfo,strTip);
//标题
lstrcpy(nid.szInfoTitle, "SysInfor Tip");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);我想接收按下气泡上的那个X的按钮的消息
case WM_USER:
//关闭气泡提示
if( lParam == NIN_BALLOONTIMEOUT )
{
//标志
nid.dwInfoFlags = NIIF_NONE;
//复制内容
lstrcpy(nid.szInfo,"");
//标题
lstrcpy(nid.szInfoTitle, "");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
break;但是,再气泡冒出来后,立即就收到了这个消息,即使没按,也会连续收到很多次,这是什么原因呢?
//创建系统托盘
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uTimeout = 20000;
nid.uID = 0;
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_INFO;
nid.uCallbackMessage = WM_USER;
nid.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_XEYE));
lstrcpy(nid.szTip, "SysInfor");
Shell_NotifyIcon(NIM_ADD, &nid);然后显示了一个气泡nid.dwInfoFlags = NIIF_INFO;
//复制内容
lstrcpy(nid.szInfo,strTip);
//标题
lstrcpy(nid.szInfoTitle, "SysInfor Tip");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);我想接收按下气泡上的那个X的按钮的消息
case WM_USER:
//关闭气泡提示
if( lParam == NIN_BALLOONTIMEOUT )
{
//标志
nid.dwInfoFlags = NIIF_NONE;
//复制内容
lstrcpy(nid.szInfo,"");
//标题
lstrcpy(nid.szInfoTitle, "");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
break;但是,再气泡冒出来后,立即就收到了这个消息,即使没按,也会连续收到很多次,这是什么原因呢?
#define WM_TRAYCALLBACK (WM_USER + 500)
没有效果,还是气泡出来就收到NIN_BALLOONTIMEOUT
另外,应该从WM_USER最好也改大一点。
怎么查有没有重复?
我没有主动发WM_USER消息,怎么查是哪里发送的?
问题在于重复不断的收到 NIN_BALLOONTIMEOUT 消息。
nid.uCallbackMessage = WM_MYCALLBACK;
case WM_CREATE:
……
nid.uCallbackMessage = WM_TRAYCALLBACK;
……
break;
case WM_TRAYCALLBACK:
//关闭气泡提示
if( lParam == NIN_BALLOONTIMEOUT )
{
//标志
nid.dwInfoFlags = NIIF_NONE;
//复制内容
lstrcpy(nid.szInfo,"");
//标题
lstrcpy(nid.szInfoTitle, "");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
break;依然气泡一冒出来就进到判断里面了
case WM_TRAYCALLBACK:
//关闭气泡提示
if( lParam == NIN_BALLOONTIMEOUT )
{
} if ( lParam == NIN_BALLOONUSERCLICK)
{
//标志
nid.dwInfoFlags = NIIF_NONE;
//复制内容
lstrcpy(nid.szInfo,"");
//标题
lstrcpy(nid.szInfoTitle, "");
//设置
Shell_NotifyIcon(NIM_MODIFY, &nid);
}
break;