c++ win32下窗口的最小化到托盘以及还原
程序员文章站
2022-03-15 08:47:27
框架是用visual studio创建的win32控制台模板,然后自己添加最小化及还原部分代码。 需要额外包含的头文件: #include #include 方式是在托盘区创建图标,隐藏主窗口。 托盘创建图标: 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);这个函数是为了让窗口在前端显示。