vc 系统托盘的实现

上传人:第*** 文档编号:32829619 上传时间:2018-02-12 格式:DOC 页数:4 大小:52KB
返回 下载 相关 举报
vc 系统托盘的实现_第1页
第1页 / 共4页
vc 系统托盘的实现_第2页
第2页 / 共4页
vc 系统托盘的实现_第3页
第3页 / 共4页
vc 系统托盘的实现_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《vc 系统托盘的实现》由会员分享,可在线阅读,更多相关《vc 系统托盘的实现(4页珍藏版)》请在金锄头文库上搜索。

1、Mfc 实现 系统托盘菜单功能2011 年 11 月 12 日 giigie 发表评论 阅读评论 Mfc 实现 系统托盘菜单功能第一步,声明一个 NOTIFYICONDATA 类,也就是 NOTIFYICONDATA NotifyIcon;该句可以放在 Dlg 类的声明中,作为 Dlg 类的一个成员;也可以放在 Dlg 类的实现中,作为全局变量来使用。第二步,声明一个响应函数 afx_msg void OnNotifyIcon(WPARAM wParam,LPARAM IParam);用于响应鼠标操作。将这个函数放入 Dlg 类的声明中,作为 Dlg 类的一个成员。第三步,定义消息名称以消息号

2、,并注册消息,该步很重要!我就是因为没有注册消息,导致调试了很久都找不到问题所在。该步都是在 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); NotifyI

3、con.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,有了上面的代码,当程序运行到含有如上代码的函数时就会在系统托盘处添加一个图标,想隐藏主对话框,就再添加一句 ShowWindow(SW_HIDE);

4、这样就实现了将 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, 以上函数写的很简单,因为我定义的是基于对

5、话框的 MFC,没有添加 menu,所以只是实现了简单的点击托盘图标就弹出主对话框。对于右键点击托盘图标弹出小 menu,然后选择操作,最好是建立工程的时候就选择基于菜单的 MFC,这样会容易很多,详细的我自己还没有研究,就不乱讲了。对于上面函数中 Shell_NotifyIcon(NIM_DELETE,&NotifyIcon)一句,是清除托盘图标,在这里可以没有,但在退出整个程序的时候一定要加上,不然程序退出了,托盘处还有一个图标,只有鼠标指到那里时系统才会发现是进程残留而清除,这种做法很不好!/显示托盘Selec All Code: 1234567891011121314151617voi

6、d 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_

7、NotifyIcon(NIM_ADD,ShowWindow(SW_HIDE);/ CDialog:OnOK();系统托盘的弹出式菜单Selec All Code: 12345void CMfcDlg:OnNotifyIcon(WPARAM wParam,LPARAM IParam)if ( IParam = WM_LBUTTONDOWN ) 67891011121314151617181920212223242526272829303132333435363738ModifyStyleEx(0,WS_EX_TOPMOST);ShowWindow(SW_SHOW);/Shell_NotifyIc

8、on(NIM_DELETE, 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(s

9、kinsesltrayprom.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_Not

10、ifyIcon(NIM_DELETE, 加载图片Selec All Code: 123456789CBitmap * MyLoadImage(CString csFilename)CString csDir;csDir = c:menu.bmp;HBITMAP hBitmap;hBitmap = (HBITMAP):LoadImage(:AfxGetInstanceHandle(),csDir, IMAGE_BITMAP, 0,0,LR_LOADFROMFILE|LR_CREATEDIBSECTION);return CBitmap:FromHandle(hBitmap);删除系统托盘Selec All Code: 12Shell_NotifyIcon(NIM_DELETE,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号