MFC使用NOTIFYICONDATA将程序隐藏到托盘区

来源:互联网 发布:华润置地 知乎 面试 编辑:程序博客网 时间:2024/05/19 04:07

借鉴:http://blog.csdn.net/heaven13483/article/details/9748231

            http://blog.csdn.net/dszgf5717/article/details/8864458

一、自定义信息

在头文件中加入下面这句话:

#define WM_SHOWTASK (WM_USER + 1)

二、在*DLG.CPP文件中添加添加消息映射

ON_MESSAGE(WM_SHOWTASK,OnShowTask)
将此段消息放在

BEGIN_MESSAGE_MAP(CVS2005SmartMemoDlg, CDialog)END_MESSAGE_MAP()

中间

三、创建缩放函数ToTray()

void CVS2005SmartMemoDlg::ToTray(){NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = AfxGetMainWnd()->m_hWnd;nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip, "程序名称"); //信息提示条 Shell_NotifyIcon(NIM_ADD, &nid); //在托盘区添加图标 ShowWindow(SW_HIDE); //隐藏主窗口}
四、创建信息处理函数OnShowTask

//wParam接收的是图标的ID,而lParam接收的是鼠标的行为

HRESULT CVS2005SmartMemoDlg::OnShowTask(WPARAM wParam, LPARAM lParam){if(wParam != IDR_MAINFRAME) return 1; switch(lParam) {case WM_RBUTTONUP://右键起来时弹出快捷菜单,这里只有一个“关闭” { LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint);//得到鼠标位置 CMenu menu; menu.CreatePopupMenu();//声明一个弹出式菜单if(IsStartKeyExist()){menu.AppendMenu(MF_STRING, ID_SET_START, "取消开机启动");}else{menu.AppendMenu(MF_STRING, ID_SET_START, "设置开机启动");}//增加菜单项“关闭”,点击则发送消息WM_DESTROY给主窗口(已隐藏),将程序结束。 menu.AppendMenu(MF_STRING, WM_DESTROY, "退出"); //确定弹出式菜单的位置SetForegroundWindow(); //此句需要置于TrackPopupMenu之前,当点击按钮外的地方,菜单消失menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x, lpoint->y, this); //资源回收HMENU hmenu = menu.Detach(); menu.DestroyMenu(); delete lpoint;}break;case WM_LBUTTONDBLCLK://双击左键的处理 {this->ShowWindow(SW_SHOW);//简单的显示主窗口DeleteTray();}break; default: break; } return 0;}



五、创建关闭程序函数DeleteTray()

void CVS2005SmartMemoDlg::ToTray(){NOTIFYICONDATA nid; nid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); nid.hWnd = AfxGetMainWnd()->m_hWnd;nid.uID = IDR_MAINFRAME; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP ; nid.uCallbackMessage = WM_SHOWTASK;//自定义的消息名称 nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip, "程序名称"); //信息提示条 Shell_NotifyIcon(NIM_ADD, &nid); //在托盘区添加图标 ShowWindow(SW_HIDE); //隐藏主窗口}


0 0
原创粉丝点击