- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MFC之托盘
在VC++中,想实现最小化MFC程序的时候,最小化到系统托盘,需要调用NOTIFYICONDATA类
下面我们就来讲解一下如何简单实现一个系统托盘 我们以对话框程序为列
第一步:在Dlg类中//定义一个NOTIFYICONDATA类的成员变量,用来设置托盘
NOTIFYICONDATA NotifyIcon;
第二步:声明一个消息响应函数 afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);
上面那条代码也放在Dlg的头文件中
第三步:定义一个自定义消息 #define WM_NC WM_USER+1
上面那条代码也在Dlg的头文件中声明
注册消息 ON_MESSAGE(WM_NC,OnNotifyIcon)
上面那条代码在Dlg类中
第四步:在Dlg头文件中添加一个函数 用来响应点击最小化按钮
void changeMini();
并在Dlg类中实现这个函数
//响应最小化消息void CChangeScreenDlg::changeMini(){ShowWindow(SW_HIDE);NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);NotifyIcon.hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);NotifyIcon.hWnd=m_hWnd;lstrcpy(NotifyIcon.szTip,MediaCraft EMMG);NotifyIcon.uCallbackMessage=WM_NC;NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;Shell_NotifyIcon(NIM_ADD,NotifyIcon);}
第五步:截获最小化事件
在Dlg类中找到OnSysCommand函数
修改代码如下
if ((nID 0xFFF0) == IDM_ABOUTBOX){?? CAboutDlg dlgAbout;?? dlgAbout.DoModal();}//拦截最小化事件if(nID==SC_MINIMIZE) { ?? //ToTray();
//用我们自己的消息响应最小化事件?? changeMini();} else{?? CDialog::OnSysCommand(nID, lParam);}
第六步:响应托盘的鼠标事件 也是实现我们第二部声明的消息响应函数
void CChangeScreenDlg::OnNotifyIcon(WPARAM wParam,LPARAM IParam){if ((IParam == WM_LBUTTONDOWN) || (IParam == WM_RBUTTONDOWN)){ ModifyStyleEx(0,WS_EX_TOPMOST);ShowWindow(SW_SHOW);}}
最后一步:在类的析构函数中 记得销毁托盘图标对象
Shell_NotifyIcon(NIM_DELETE, NotifyIcon);
傻朋提示:以上NOTIFYICONDATA类的一些具体参数,请参阅MSDN
一、NOTIFYICONDATA结构
NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示消息、图标对应的窗口等内容。其定义为:
??? typedef struct _NOTIFYICONDATA { ??????? DWORD cbSize;???????? ?? //以字节为单位的这个结构??大小??????? HWND hWnd; ???? ?? //接收托盘图标通知消息的窗口句柄??????? UINT uID; //应用程序定义的该图标的ID号??????? UINT uFlags;????????? ?? //设置该图标的属性??????? UINT uCallbackMessage;?? ?? //应用程序定义的消息ID号,此消息传递给hWnd??????? HICON hIcon;??????????? ?? //图标的句柄????? char szTip[64];????????? ?? //鼠标停留在图标上显示的提示信息??? } NOTIFYICONDATA, *PNOTIFYICONDATA;该结构中,成员uFlags可以使下列之一或组合:??? NIF_ICON??????? 设置成员hIcon有效??? NIF_MESSAGE??? 设置成员uCallbackMessage有效??? NIF_TIP?????????? 设置成员szTip有
文档评论(0)