MFC对话框最小化到托盘

转载 2011年01月22日 22:07:00

1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉;

2、在自己的Dialog头文件中定义一个变量  NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN;

3、添加消息响应函数OnInitDialog(),并在该函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标。

    //---------------------------托盘显示---------------------------------//

    m_nid.cbSize  = (DWORD)sizeof(NOTIFYICONDATA);

    m_nid.hWnd    = this->m_hWnd;

    m_nid.uID     = IDR_MAINFRAME;

    m_nid.uFlags  = NIF_ICON | NIF_MESSAGE | NIF_TIP ;

    m_nid.uCallbackMessage = WM_SHOWTASK;             // 自定义的消息名称

    m_nid.hIcon   = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));

    strcpy(m_nid.szTip, "服务器程序");                // 信息提示条为"服务器程序",VS2008 UNICODE编码用wcscpy_s()函数

    Shell_NotifyIcon(NIM_ADD, &m_nid);                // 在托盘区添加图标

    这时候编译,会报WM_SHOWTASK的错,因为该消息要自己定义。

4、在Dialog头文件中声明消息函数原型                                         

    LRESULT OnShowTask(WPARAM wParam, LPARAM lParam);

5、在Dialog源文件中进行消息映射

    ON_MESSAGE(WM_SHOWTASK,OnShowTask)

6、在Dialog源文件中添加自定义的消息响应代码,左键双击弹出应用程序主窗口,右键单击弹出菜单。

    LRESULT CServerDlg::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();                    // 声明一个弹出式菜单

                         menu.AppendMenu(MF_STRING, WM_DESTROY, "关闭");

                         menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint->x ,lpoint->y, this);

                         HMENU hmenu = menu.Detach();

                         menu.DestroyMenu();

                         delete lpoint;

                  }

                  break;

           case WM_LBUTTONDBLCLK:                                 // 双击左键的处理

                  {

                         this->ShowWindow(SW_SHOWNORMAL);         // 显示主窗口

                  }

                  break;

           }

           return 0;

    }

7、添加OnSize消息响应函数,处理最小化时的操作。

    void CServerDlg::OnSize(UINT nType, int cx, int cy)

    {

           CDialog::OnSize(nType, cx, cy);

           // TODO: Add your message handler code here

           if(nType == SIZE_MINIMIZED)  

           {  

                  ShowWindow(SW_HIDE); // 当最小化市,隐藏主窗口              

           }  

    }

8、添加关闭窗口时的消息响应函数,将托盘中的应用程序图标删除

    BOOL CServerDlg::DestroyWindow()

    {

           // TODO: Add your specialized code here and/or call the base class

           // 在托盘区删除图标

           Shell_NotifyIcon(NIM_DELETE, &m_nid);             

           return CDialog::DestroyWindow();

    }

    经过以上的步骤,就编写出了一个简单的可以最小化到托盘的程序。该程序在一启动时,在托盘创立应用程序的图标,最小化程序时隐藏主窗口,双击托盘区的图标时,显示主窗口,右键点击托盘区窗口时,弹出菜单进行相应的操作。

MFC 程序最小化到系统托盘区的一个简单实例

准备工作:      在开始之前,我们需要弄清出一下东东,当然,你也可以知其然而不知其所以然,会用就好。          1. MFC 自定义消息的过程(详见后文)          2. BOOL...

MFC对话框最小化到托盘编程实现步骤

以工程为例说明过程:此程序编程环境是VS2008,在调试过程中,将字符集修改为“使用多字节字符集”(项目->属性->配置属性->字符集)。 例如新建一个MFC对话框工程Dialogtest,程序实现...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

MFC 最小化到托盘及右击托盘菜单

//全局变量 NOTIFYICONDATA nid;//托盘图标全局变量//在stdafx.h #define WM_SHOWTASK (WM_USER + 123) // 关联消息映射函数 // 位...
  • salony
  • salony
  • 2016年01月21日 22:30
  • 1620

系统接口规范以及常见的接口技术概述和比较

系统接口规范以及常见的接口技术概述和比较 一、基本要求: 为了保证系统的完整性和健壮性,系统接口应满足下列基本要求: 1、接口应实现对外部系统的接入提供企业级...

MFC对话框最小化到托盘

1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉; 2、在自己的Dialog头文件中定义一个变量  NOT...
  • onetpig
  • onetpig
  • 2012年10月15日 14:37
  • 290

在MFC中让对话框最小化到托盘

1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉; 2、在自己的Dialog头文件中定义一个变量  NOTIFYI...

MFC对话框最小化到托盘

1、在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉; 2、在自己的Dialog头文件中定义一个变量  NOTIF...

MFC最小化到系统托盘 MFC初始化时隐藏对话框

在VC++中,想实现将MFC最小化到系统托盘,需要调用NOTIFYICONDATA类,并注册相应的消息,以下详细讲解如何实现:     第一步,声明一个NOTIFYICONDATA类,也就是NOTI...
  • oket007
  • oket007
  • 2013年12月23日 08:33
  • 1188

MFC 主对话框最小化到托盘,托盘点击还原主对话框。

1.将主对话框资源属性Minimize Box设置为true,这个属性显示对话框的最小化按钮。 2.最小化到托盘。 (1)首先要了解,你任务栏右下角的托盘都是图标,所以最小化到托盘建议添加一个Icon...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC对话框最小化到托盘
举报原因:
原因补充:

(最多只允许输入30个字)