MFC基于Dialog的托盘程序(Visual C++ 2013)

上传人:豆浆 文档编号:11121609 上传时间:2017-09-02 格式:PDF 页数:4 大小:565.02KB
返回 下载 相关 举报
MFC基于Dialog的托盘程序(Visual C++ 2013)_第1页
第1页 / 共4页
MFC基于Dialog的托盘程序(Visual C++ 2013)_第2页
第2页 / 共4页
MFC基于Dialog的托盘程序(Visual C++ 2013)_第3页
第3页 / 共4页
MFC基于Dialog的托盘程序(Visual C++ 2013)_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《MFC基于Dialog的托盘程序(Visual C++ 2013)》由会员分享,可在线阅读,更多相关《MFC基于Dialog的托盘程序(Visual C++ 2013)(4页珍藏版)》请在金锄头文库上搜索。

1、MFC基于 Dialog的托盘程序 MFC基于 DIALOG的托盘程序 . 1 一、 托盘是什么 . 1 二、 NOTIFYICODDATA结构和 SHELL_NOTIFYICON函数 . 1 三、 开发过程 . 2 一、 托盘是什么 所谓的“托盘”,在 Windows 系统界面中,指的就是下面任务条右侧,有系统时间等等的标志的那一部分。在程序最小化或挂起时,但有不希望占据任务栏的时候,就可以把程序放到托盘区。 二、 NOTIFYICODDATA结构和 Shell_NotifyIcon函数 1、 NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息,它包括选择的图标、回调消息、提示

2、消息和图标对 应的窗口等内容。其定义为: typedef struct _NOTIFYICONDATA DWORD cbSize; /以字节为单位的这个结构的大小 HWND hWnd; /接收托盘图标通知消息的窗口句柄 UINT uID; /应用程序定义的该图标的 ID号 UINT uFlags; /设置该图标的属性 UINT uCallbackMessage; /应用程序定义的消息 ID号,此消息传递给 hWnd HICON hIcon; /图标的句柄 char szTip64; /鼠标停留在图标上显示的提示信息 DWORD dwState; /Version 5.0图标的状态 DWORD

3、dwStateMask; /指明 dwState成员的哪些位可以被设置或者访问 TCHAR szInfo256; /指向一个以 0结束的字符串的指针 union UINT uTimeout; UINT uVersion; ; TCHAR szInfoTitle64; DWORD dwInfoFlags; GUID guidItem; NOTIFYICONDATA, *PNOTIFYICONDATA; 该结构中,成员 uFlags可以是下列的组合或其中之一: NIF_ICON:设置成员 hIcon有效 NIF_MESSAGE:设置成员 uCallbackMessage有效 NIF_TIP:设置成

4、员 szTip 有效 2、 全局函数 Shell_NotifyIcon()用于在托盘上增加、删除或修改图标。其原型为: WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(DWORD dwMessage, PNOTIFYICONDATA pnid); pnid是上面的 NOTIFYICONDATA结构的指针。 dwMessage是被传递的消息,可以是以下消息之一: NIM_ADD:增加图标 NIM_DELETE:删除图标 NIM_MODIFY:修改图标 三、 开发过程 ( 基于 Visual C+ 2013 开发平台并 参照教材 Visual C+ 范例开发大全)

5、 1、 新建一个基于对话框的应用 程序,工程名取为 TrayDialog; 2、 为 CtrayDialogDlg类添加自定义消息 WM_TRAY_NOTIFICATION; 在头文件 TrayDialogDlg.h中添加 #define WM_TRAY_NOTIFICATION WM_USER+1 打开类向导,选择消息选项卡,打开添加自定义消息对话框,添加自定义消息; Figure 1添加自定义消息 这时头文件 TrayDialogDlg.h中 会自动添加声明 afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam);

6、执行文件 TrayDialogDlg.cpp的消息映射中会自动添加消息映射 ON_MESSAGE(WM_TRAY_NOTIFICATION, &CTrayDialogDlg:OnTrayNotification) 3、 编辑消息处理函数 afx_msg LRESULT CTrayDialogDlg:OnTrayNotification(WPARAM wParam, LPARAM lParam) switch (lParam) case WM_RBUTTONUP: LPPOINT lpoint = new tagPOINT; :GetCursorPos(lpoint); CMenu Menu;

7、Menu.CreatePopupMenu(); Menu.AppendMenuW(MF_STRING, WM_DESTROY, L关闭 ); Menu.TrackPopupMenu(TPM_LEFTALIGN, lpoint-x, lpoint-y, this); SetForegroundWindow(); HMENU hmenu = Menu.Detach(); delete lpoint; break; case WM_LBUTTONDBLCLK: ShowWindow(SW_SHOW); TrayMessage(m_hWnd, NIM_DELETE, NULL, L); break;

8、return 0; 4、 添加实现托盘化的全局函数 TrayMessage(); 在头文件 TrayDialog.h中添加函数声明 BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip); 在 执行文件 TrayDialog.cpp中添加函数定义 BOOL TrayMessage(HWND hWnd, DWORD dwMessage, HICON hIcon, LPCWSTR pszTip) BOOL bReturn; NOTIFYICONDATA NofityData; NofityData.cbSi

9、ze = (DWORD)sizeof(NOTIFYICONDATA); NofityData.hWnd = hWnd; NofityData.uID = IDR_MAINFRAME; NofityData.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; NofityData.uCallbackMessage = WM_TRAY_NOTIFICATION; NofityData.hIcon = hIcon; lstrcpyn(NofityData.szTip, pszTip, sizeof(NofityData.szTip); bReturn = Shell

10、_NotifyIcon(dwMessage, &NofityData); if (hIcon) DestroyIcon(hIcon); return bReturn; 5、 为 类 CTrayDialogDlg 的 WM_SYSCOMMAND 消息的响应函数 OnSysCommand()添加窗口最小化时的处理事件 (此处需要将对话框的 Minimize 属性 设置为 True,否则就需要在对话框中加入最小化按钮,如教材中所述)。 void CTrayDialogDlg:OnSysCommand(UINT nID, LPARAM lParam) if (nID & 0xFFF0) = IDM_A

11、BOUTBOX) CAboutDlg dlgAbout; dlgAbout.DoModal(); /添加窗口最小化时的处理事件 else if (nID = SC_MINIMIZE) TrayMessage(m_hWnd, NIM_ADD, NULL, L); TrayMessage(m_hWnd, NIM_MODIFY, m_hIcon, L在托盘区显示图标 ); ShowWindow(SW_HIDE); else CDialogEx:OnSysCommand(nID, lParam); 6、 如果需要在打开程序时即在托盘中显示图标,可在对话框的初始化方法 OnInitDialog()中添加代码 / TODO: 在此添加额外的初始化代码 TrayMessage(m_hWnd, NIM_ADD, NULL, L); TrayMessage(m_hWnd, NIM_MODIFY, m_hIcon, L在托盘区显示图标 ); ShowWindow(SW_HIDE); 7、 调试运行。 Figure 2鼠标停留在图标上时显示字符 Figure 3单击鼠标右键时显示关闭菜单

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

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