在windows 7上,Visual Studio 2012,只想做一个ballon提示,从网上各种百度,效果都不会,最终微软sdk的example找到了完整的例子。
使用的工程是vs2005 升级到2012的,重定义宏,不然会有些定义不了
#ifdef NTDDI_VERSION
#undef NTDDI_VERSION
#endif
#define NTDDI_VERSION NTDDI_WIN7
剩下的就简单了
bool add_notification_icon();
bool del_notification_icon();
bool show_balloon_notification_icon(CString title, CString str);
开始的时候在程序内部缓存了结构,但是都没有成功,不知道为什么。sdk的例子都是在栈上分配出来的。
class __declspec(uuid("9D0B8B92-4E1C-488e-A1E1-2331AFCE2CB5")) quectel_guid;
bool CConnectionManagerDlg::add_notification_icon()
{
BOOL bRet;
DWORD dwError;
NOTIFYICONDATA nid = {sizeof(nid)};
nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE | NIF_GUID;
nid.guidItem = __uuidof(quectel_guid);
nid.uCallbackMessage = WM_TASKBAR_EVENT;
nid.hIcon = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_BAR));
nid.hWnd = m_hWnd;
_tcscpy(nid.szTip, L"hello world");
bRet = Shell_NotifyIcon(NIM_ADD, &nid);
dwError = GetLastError();
nid.uVersion = NOTIFYICON_VERSION_4;
return bRet = Shell_NotifyIcon(NIM_SETVERSION, &nid);
}
bool CConnectionManagerDlg::show_balloon_notification_icon(CString title, CString msg)
{
NOTIFYICONDATA nid = {sizeof(nid)};
nid.uFlags = NIF_INFO | NIF_GUID;
nid.guidItem = __uuidof(quectel_guid);
// respect quiet time since this balloon did not come from a direct user action.
nid.dwInfoFlags = NIIF_WARNING | NIIF_RESPECT_QUIET_TIME;
//LoadString(g_hInst, IDS_LOWINK_TITLE, nid.szInfoTitle, ARRAYSIZE(nid.szInfoTitle));
//LoadString(g_hInst, IDS_LOWINK_TEXT, nid.szInfo, ARRAYSIZE(nid.szInfo));
_tcscpy(nid.szInfoTitle, title);
_tcscpy(nid.szInfo, msg);
return Shell_NotifyIcon(NIM_MODIFY, &nid);
}
bool CConnectionManagerDlg::del_notification_icon()
{
NOTIFYICONDATA nid = {sizeof(nid)};
nid.uFlags = NIF_GUID;
nid.guidItem = __uuidof(quectel_guid);
return Shell_NotifyIcon(NIM_DELETE, &nid);
}
剩下的就是用按钮测试一下吧,本地测试效果还行。