11.5.4 控制模块在托盘中消息处理功能的实现
当用户动作于托盘中的截屏模块图标时,它将向主窗体发送WM_SHOTS。这个消息为自定义消息:
- #define WM_SHOTS (WM_USER + 101)
为了响应这个消息需要为该消息添加一个处理函数OnShowShots()。 - 01 LRESULT CScreenShotsDlg::OnShowShots(WPARAM wParam, LPARAM lParam)
- 02 {
- 03 if(wParam!=IDR_MAINFRAME)
- 04 {
- 05 return 1;
- 06 }
- 07 switch(lParam)
- 08 {
- 09 case WM_RBUTTONUP: //右键弹起时弹出快捷菜单
- 10 {
- 11 LPPOINT lpoint=new tagPOINT;
- 12 ::GetCursorPos(lpoint); //得到鼠标位置
- 13 CMenu menu;
- 14 menu.CreatePopupMenu(); //声明一个弹出式菜单
- 15 menu.AppendMenu(MF_STRING,IDC_START,"截图");
- 16 menu.AppendMenu(MF_STRING,IDOK,"退出");
- 17 //确定弹出式菜单的位置
- 18 menu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x, lpoint->y,
- this);
- 19 //资源回收
- 20 HMENU hmenu=menu.Detach();
- 21 menu.DestroyMenu();
- 22 delete lpoint;
- 23 }
- 24 break;
- 25 case WM_LBUTTONDBLCLK: //双击左键的处理
- 26 {
- 27 this->ShowWindow(SW_SHOW); //简单的显示主窗口
- 28 }
- 29 break;
- 30 }
- 31 return 0;
- 32 }
【代码解析】
第3行判断接收消息的窗口是否为主窗体,否则退出。第7行判断发送的消息类型,当为鼠标单击事件时,第9~23行弹出一个菜单,菜单有截图及退出两个子选项。截图菜单选项ID对应着主窗体的开始截图按钮,而退出菜单选项的ID对应着退出程序按钮。当消息为鼠标单击时,在第27行显示主窗体即可。