11.5.3 控制模块最小化到托盘功能的实现
当用户单击"后台运行"按钮时,控制模块将在托盘中添加一个截屏图标,并隐藏主窗体。功能实现如下:
- 01 void CScreenShotsDlg::OnHide()
- 02 {
- 03 NOTIFYICONDATA nid;
- 04 nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);
- 05 nid.hWnd=this->m_hWnd;
- 06 nid.uID=IDR_MAINFRAME;
- 07 nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;
- 08 nid.uCallbackMessage=WM_SHOTS; //自定义的消息名称
- 09 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),
- 10 MAKEINTRESOURCE(IDR_MAINFRAME));
- 11 strcpy(nid.szTip,"ScreenShots"); //信息提示条为ScreenShots
- 12 Shell_NotifyIcon(NIM_ADD,&nid); //在托盘区添加图标
- 13 ShowWindow(SW_HIDE); //隐藏主窗口
- 14 }
【代码解析】
Shell_NotifyIcon()函数向托盘发送一个消息,以添加或删除一个图标。在这里第一个参数为NIM_ADD向托盘区域添加一个图标。此时第二个参数NOTIFYICONDATA型结构nid中的hWnd和uID成员用来标示这个图标,以便以后再次使用Shell_NotifyIcon对此图标操作。ShowWindow()函数以SW_HIDE为参数,可实现隐藏当前窗体的功能。第8行为这个托盘图标添加了一个自定消息WM_SHOTS,当用户鼠标双击、单击这个图标时,它将向第5行注册的窗体发送这个消息。