最近在學習使用Duilib,這個庫實現PC程序的界面確實很方便。Duilib中的demo程序全是點擊關閉按鈕程序就關閉了,因此這裏我實現了一個點擊關閉按鈕後程序最小化到托盤的效果。以及常規的,鼠標左鍵點擊托盤裏的程序圖標後程序正常顯示。右鍵點擊後出現退出菜單,點擊退出按鈕後程序正常退出。
下面是關鍵部分源碼:學習
#include <ShellAPI.h> #define WM_SHOWTASK WM_USER+101 #define WM_ONCLOSE WM_USER+102
memset(&m_nid,0,sizeof(NOTIFYICONDATA)); m_nid.cbSize = sizeof(NOTIFYICONDATA); m_nid.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL)); m_nid.hWnd = m_hWnd; lstrcpy(m_nid.szTip, _T("Duilib程序")); m_nid.uCallbackMessage = WM_SHOWTASK; m_nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIcon(NIM_ADD, &m_nid); ShowWindow(SW_HIDE);
//若是在圖標中單擊左鍵則還原 if( lParam == WM_LBUTTONDOWN ) { Shell_NotifyIcon(NIM_DELETE, &m_nid);//刪除托盤圖標 ShowWindow(SW_SHOWNORMAL);//顯示主窗口 } //若是在圖標中單擊右鍵則彈出聲明式菜單 if( lParam == WM_RBUTTONDOWN ) { //獲取鼠標座標 POINT pt; GetCursorPos(&pt); SetForegroundWindow(m_hWnd); //右擊後點別地能夠清除「右擊出來的菜單」 HMENU hMenu; //托盤菜單 win32程序使用的是HMENU,若是是MFC程序可使用CMenu hMenu = CreatePopupMenu();//生成托盤菜單 AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("退出")); int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd, NULL); if(cmd == WM_ONCLOSE) { //退出程序 m_nid.hIcon = NULL; Shell_NotifyIcon(NIM_DELETE, &m_nid); ::PostQuitMessage(0); } }