1. 新建一个MFC应用程序,选择“基于对话框”,其余默认选择。
2. 在“资源视图”中选择Dialog->IDD_XXX_DIALOG,在主界面视图上删除"To Do"标识。“确定”按钮及“取消”按钮可选。
3. 在“类视图”中选取CXXXDlg类,右键选中“添加”->“添加函数”,添加函数void MinimizeToTray()。系统会自动生成CXXXDlg类的函数声明和函数定义(空)。在函数定义中,我们添加如下内容:
NOTIFYICONDATA nid; |
这段代码会在托盘区添加一个图标,并隐藏主界面。
4. 上面的代码中有一个WM_SHOWTASK消息,需要我们自行定义。在XXXDlg.h文件中,"#progma once"后面我们加入如下语句:
#define WM_SHOWTASK WM_USER + 100 |
5. 依然在“类视图”中选取CXXXDlg类,选择“添加函数”,添加函数LRESULT ONShowTask(WPARAM wParam, LPARAM lParam)。可能需要你在XXXDlg.h中将该函数的声明加前缀"afx_msg"。函数定义中我们添加如下内容:
//wParam接收的是图标的ID,而lParam接收的是鼠标的行为 if( wParam != IDR_MAINFRAME ) switch(lParam) //资源回收 //资源回收 |
6. 在消息队列里面添加以上函数的相应响应函数:
ON_MESSAGE(WM_SHOWTASK, ONShowTask) |
7. 为了在关闭窗口后托盘图标可以正常删除,需要捕捉WM_DESTROY消息。在对话框属性中点选“消息”,在WM_DESTROY后选取"<添加>OnDestroy",然后为该响应函数添加以下代码:
CDialog::OnDestroy(); //删除托盘图标 //用NIM_DELETE删除图标 |
8. 为了能够让主窗口可以被最小化到系统托盘,我们准备通过两种办法来达到这一目标。一、点击主界面右上角关闭按钮,不再直接关闭程序,而是最小化至系统托盘。我们需要在OnSysCommand()函数中拦截SC_CLOSE消息,为其添加如下代码:
if ((nID & 0xFFF0) == IDM_ABOUTBOX) |
二、我们在对话框中增加一个按钮,名为“隐藏”,并将其ID改为"IDC_HIDE"。双击按钮,转到其响应函数,并为其添加如下代码:
MinimizeToTray(); |