1. 程式人生 > >windows程式托盤圖示以及訊息提示--示例程式

windows程式托盤圖示以及訊息提示--示例程式

之前兩個部落格介紹一些基本姿勢,都是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);

不多說了 上一個提示對比圖吧:
這裡寫圖片描述
這裡寫圖片描述
通用的程式碼 不同的效果