vc 系统托盘的实现.doc_第1页
vc 系统托盘的实现.doc_第2页
vc 系统托盘的实现.doc_第3页
vc 系统托盘的实现.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Mfc 实现 系统托盘菜单功能2011年11月12日 giigie 发表评论 阅读评论 Mfc 实现 系统托盘菜单功能第一步,声明一个NOTIFYICONDATA类,也就是NOTIFYICONDATA NotifyIcon;该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。第二步,声明一个响应函数afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。第三步,定义消息名称以消息号,并注册消息,该步很重要!我就是因为没有注册消息,导致调试了很久都找不到问题所在。该步都是在Dlg.cpp(Dlg的实现中)中操作。定义消息名称和消息号:#define WM_NC (WM_USER+1001),1001只是用于指定一个消息号,可以随便指定。注册则是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加ON_MESSAGE(WM_NC,OnNotifyIcon)。第四步,在要将MFC最小化到系统托盘的函数中添加如下代码: NotifyIcon.cbSize=sizeof(NOTIFYICONDATA); NotifyIcon.hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME); NotifyIcon.hWnd=m_hWnd; lstrcpy(NotifyIcon.szTip,NotifyIcon Test); NotifyIcon.uCallbackMessage=WM_NC; NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIcon(NIM_ADD,&NotifyIcon);有了上面的代码,当程序运行到含有如上代码的函数时就会在系统托盘处添加一个图标,想隐藏主对话框,就再添加一句ShowWindow(SW_HIDE);这样就实现了将MFC最小化到系统托盘。但还要添加点击托盘图标时响应鼠标的函数,也就是第二步中的函数OnNotifyIcon。第五步,OnNotifyIcon函数,如下: void CDlg: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); 以上函数写的很简单,因为我定义的是基于对话框的MFC,没有添加menu,所以只是实现了简单的点击托盘图标就弹出主对话框。对于右键点击托盘图标弹出小menu,然后选择操作,最好是建立工程的时候就选择基于菜单的MFC,这样会容易很多,详细的我自己还没有研究,就不乱讲了。对于上面函数中Shell_NotifyIcon(NIM_DELETE,&NotifyIcon)一句,是清除托盘图标,在这里可以没有,但在退出整个程序的时候一定要加上,不然程序退出了,托盘处还有一个图标,只有鼠标指到那里时系统才会发现是进程残留而清除,这种做法很不好!/显示托盘Selec All Code: 1234567891011121314151617void CMfcDlg:OnOK() / TODO: Add extra validation hereNotifyIcon.cbSize=sizeof(NOTIFYICONDATA); NotifyIcon.hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME); NotifyIcon.hWnd=m_hWnd; lstrcpy(NotifyIcon.szTip,NotifyIcon Test); NotifyIcon.uCallbackMessage=WM_NC; NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP; Shell_NotifyIcon(NIM_ADD,&NotifyIcon);ShowWindow(SW_HIDE);/CDialog:OnOK();系统托盘的弹出式菜单Selec All Code: 1234567891011121314151617181920212223242526272829303132333435363738void CMfcDlg:OnNotifyIcon(WPARAM wParam,LPARAM IParam)if ( IParam = WM_LBUTTONDOWN ) ModifyStyleEx(0,WS_EX_TOPMOST);ShowWindow(SW_SHOW);/Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);if ( IParam = WM_RBUTTONDOWN ) CMenu menu;LPPOINT lpoint = new tagPOINT;:GetCursorPos(lpoint); / 得到鼠标位置menu.LoadMenu(IDR_MENU1);CMenu *pPopup=menu.GetSubMenu(0);CBitmap *bmp;bmp = MyLoadImage(skinselstrayconfig.bmp);pPopup-SetMenuItemBitmaps(0,MF_BYPOSITION,bmp,bmp);bmp = MyLoadImage(skinsesltrayprom.bmp);pPopup-SetMenuItemBitmaps(1,MF_BYPOSITION,bmp,bmp);bmp = MyLoadImage(skinselstrayaboutme.bmp);pPopup-SetMenuItemBitmaps(2,MF_BYPOSITION,bmp,bmp);pPopup-TrackPopupMenu(TPM_LEFTALIGN, lpoint-x ,lpoint-y, this);HMENU hmenu = menu.Detach();menu.DestroyMenu();delete lpoint;/Shell_NotifyIcon(NIM_DELETE, &NotifyIcon);加载图片Selec All Code: 123456789CBitmap * MyLoadImage(CString csFilename)CString csDir;csDir = c:menu.bmp;HBITMAP hBitmap;hBitmap = (HBITMAP):LoadImage(:AfxGetInstanceHandle(),csDir, I

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论