MFC 为程序制作一个系统托盘图标、显示隐藏任务栏图标

来源:互联网 发布:开淘宝网店教程 编辑:程序博客网 时间:2024/05/21 19:29

以MFC对话框程序为例,为此对话框程序制作一个系统托盘图标。

    1、 首先定义一个 NOTIFYICONDATA 类型的类成员变量 m_NotifyIcon;

    2、  在BOOL CxxxDlg::OnInitDialog()函数中对m_NotfyIcon 初始化:

           m_NotifyIcon.cbSize = sizeof(NOTIFYICONDATA);           m_NotifyIcon.hWnd = this->GetSafeHwnd();           strcpy(m_NotifyIcon.szTip,"文件夹监视程序");//提示文字           m_NotifyIcon.uCallbackMessage = WM_ICONMESSAGE;//回调消息           m_NotifyIcon.uFlags = NIF_MESSAGE|NIF_TIP|NIF_ICON;//新增标志           m_NotifyIcon.hIcon = m_hIcon;//图标句柄           m_NotifyIcon.uID = IDR_MAINFRAME;           Shell_NotifyIcon(NIM_ADD,&m_NotifyIcon);//为系统托盘增加此图标
   3、在 xxxDlg.cpp 文件中增加3个宏定义:

        #define WM_ICONMESSAGE WM_USER + 101        #define ID_MENU_EXIT   10005        #define ID_MENU_SHOW   10008

  4、重载虚基类函数 LRESULT CxxxDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam),并在函数中增加如下代码

LRESULT CxxxDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam){// TODO: 在此添加专用代码和/或调用基类switch(message){case WM_ICONMESSAGE:if(lParam == WM_RBUTTONDOWN){CMenu menu;CPoint point;GetCursorPos(&point);menu.CreatePopupMenu();menu.AppendMenu(MF_STRING, ID_MENU_SHOW, _T("显示/隐藏"));menu.AppendMenu(MF_SEPARATOR);menu.AppendMenu(MF_STRING, ID_MENU_EXIT, _T("退出程序"));menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this, NULL);menu.DestroyMenu();}break;default:break;}return CDialogEx::DefWindowProc(message, wParam, lParam);}
5、为程序添加显示/隐藏及退出的操作。增加两个成员函数OnMenuShow()和OnMenuExit();

void CxxxDlg::OnMenuExit(void){SendMessage(WM_CLOSE, 0, 0);//发送关闭程序消息}void CxxxDlg::OnMenuShow(void){if(IsWindowVisible())//若当前窗口为显示状态则隐藏,否则反之{ShowWindow(SW_HIDE);}else{ShowWindow(SW_SHOW);}}
6、为程序添加上面两个函数的消息映射,在BEGIN_MESSAGE_MAP(CxxxDlg, CDialogEx) 与END_MESSAGE_MAP()之间添加如下代码:

ON_COMMAND(ID_MENU_EXIT, OnMenuExit)ON_COMMAND(ID_MENU_SHOW, OnMenuShow)

7、有关 NOTIFYICONDATA 结构体的知识


原创粉丝点击