框架是用visual studio創建的win32控制台模板,然後自己添加最小化及還原部分代碼。 需要額外包含的頭文件: #include <shellapi.h> #include <WinUser.h> 方式是在托盤區創建圖標,隱藏主視窗。 托盤創建圖標: void ToTray(HWND hW ...
框架是用visual studio創建的win32控制台模板,然後自己添加最小化及還原部分代碼。
需要額外包含的頭文件:
#include <shellapi.h>
#include <WinUser.h>
方式是在托盤區創建圖標,隱藏主視窗。
托盤創建圖標:
void ToTray(HWND hWnd) { NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_TO_TRAY;//自定義的消息 處理托盤圖標事件 nid.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_SMALL)); wcscpy_s(nid.szTip, _T("自定義程式名"));//滑鼠放在托盤圖標上時顯示的文字 Shell_NotifyIcon(NIM_ADD, &nid);//在托盤區添加圖標 }
關閉軟體時需要銷毀托盤區的圖標,不然滑鼠划過才會消失:
void DeleteTray(HWND hWnd) { NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = hWnd; nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = WM_TO_TRAY;//自定義的消息名稱 處理托盤圖標事件 nid.hIcon = LoadIcon(GetModuleHandle(0), MAKEINTRESOURCE(IDI_SMALL)); wcscpy_s(nid.szTip, _T("自定義程式名"));//滑鼠放在托盤圖標上時顯示的文字 Shell_NotifyIcon(NIM_DELETE, &nid);//在托盤中刪除圖標 }
最小化的時候去隱藏視窗需要捕捉最小化的消息,這個消息在處理WM_SIZE時,wParam參數為SIZE_MINIMIZED。
視窗關閉時銷毀托盤:
雙擊托盤圖標還原視窗:
SetForegroundWindow(hWnd);這個函數是為了讓視窗在前端顯示。