mfc对话框启动就直接隐藏在右下角显示托盘图标
时间: 2023-12-09 16:04:29 浏览: 181
您可以在MFC对话框的OnInitDialog()函数中添加以下代码来实现该功能:
```cpp
// 加入以下头文件
#include "Shellapi.h"
// 在OnInitDialog()函数中添加以下代码
NOTIFYICONDATA nid; // 定义托盘图标结构体
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
nid.hWnd = this->GetSafeHwnd();
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nid.uCallbackMessage = WM_USER_SHELLICON;
lstrcpy(nid.szTip, _T("您的应用程序名称"));
Shell_NotifyIcon(NIM_ADD, &nid); // 在托盘区添加图标
ShowWindow(SW_HIDE); // 隐藏对话框窗口
```
此外,您还需要添加以下消息映射函数:
```cpp
BEGIN_MESSAGE_MAP(CYourDialog, CDialogEx)
// ...
ON_MESSAGE(WM_USER_SHELLICON, OnTrayNotification)
END_MESSAGE_MAP()
LRESULT CYourDialog::OnTrayNotification(WPARAM wParam, LPARAM lParam)
{
UINT uID;
UINT uMsg;
uID = (UINT)wParam;
uMsg = (UINT)lParam;
if (uID != IDR_MAINFRAME)
return 0;
if (uMsg == WM_RBUTTONUP)
{
CMenu menu;
VERIFY(menu.LoadMenu(IDR_MENU_TRAY));
CMenu* pSubMenu = menu.GetSubMenu(0);
ASSERT(pSubMenu != NULL);
// 获取鼠标位置,并转换为屏幕坐标
POINT pt;
GetCursorPos(&pt);
// 显示菜单
SetForegroundWindow();
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, pt.x, pt.y, this);
PostMessage(WM_NULL, 0, 0);
}
else if (uMsg == WM_LBUTTONDBLCLK)
{
ShowWindow(SW_SHOW); // 显示对话框窗口
Shell_NotifyIcon(NIM_DELETE, &nid); // 在托盘区删除图标
}
return 0;
}
```
这样,当您的MFC对话框启动时,它将会隐藏在系统托盘区中,并显示您指定的托盘图标。当用户单击托盘图标时,对话框窗口将会显示出来。
阅读全文