windows程式托盤圖示以及訊息提示--示例程式
阿新 • • 發佈:2019-01-02
之前兩個部落格介紹一些基本姿勢,都是msdn上的,今天就介紹一下如何使用吧。
為了簡單起見,還是建立一個MFC based on dialog 功能吧。
1建立托盤圖示,封裝了成一個函式:
NOTIFYICONDATA m_nid;
bool SetupTrayIcon(HWND m_hWnd)
{
m_nid.cbSize=sizeof(NOTIFYICONDATA);// 結構大小
m_nid.hWnd=m_hWnd; // 接收 托盤通知訊息 的視窗控制代碼
m_nid.uID=IDR_MAINFRAME;
m_nid.uFlags =NIF_MESSAGE//表示uCallbackMessage 有效
m_nid.uCallbackMessage=WM_PROC; // 訊息被髮送到此視窗過程
m_nid.hIcon=::LoadIcon(::GetModuleHandle(NULL),MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(m_nid.szTip,"我的工作列程式"); // 提示文字
return 0!=Shell_NotifyIcon(NIM_ADD,&m_nid);
}
2訊息提醒
如果你仔細閱讀過NOTIFYICONDATA,你肯定會恍然大悟,氣泡提示不是針對所有的系統的。
XP上當然一點作用沒有,WIN7上是氣泡提醒,而在WIN10上就變成了從側面滑入的形式(Metro式的通知方式)。但是程式碼是通用的:
BOOL ShowBalloonTip(LPCTSTR szMsg,LPCTSTR szTitle,DWORD dwInfoFlags=NIIF_INFO,UINT uTimeout=1000)
{
m_nid.cbSize=sizeof(NOTIFYICONDATA);
m_nid.uFlags = NIF_INFO;
m_nid.uVersion = NOTIFYICON_VERSION;
m_nid.uTimeout = uTimeout;
m_nid.dwInfoFlags = dwInfoFlags;
strcpy(m_nid.szInfo,szMsg ? szMsg : _T(""));
strcpy(m_nid.szInfoTitle,szTitle ? szTitle : _T(""));
return 0!=Shell_NotifyIcon(NIM_MODIFY, &m_nid);
}
3刪除托盤圖示
簡單的很:
Shell_NotifyIcon(NIM_DELETE,&m_nid);
不多說了 上一個提示對比圖吧:
通用的程式碼 不同的效果