ImageVerifierCode 换一换
格式:DOCX , 页数:10 ,大小:21.30KB ,
资源ID:21185260      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21185260.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(利用Visual C++实现系统托盘程序Word文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

利用Visual C++实现系统托盘程序Word文档格式.docx

1、NIM_ADD: 添加一个图标到任务栏。NIM_MODIFY: 修改状态栏区域的图标。NIM_DELETE: 删除状态栏区域的图标。NIM_SETFOCUS: 将焦点返回到任务栏通知区域。当完成用户界面操作时,任务栏图标必须用此消息。例如,如果任务栏图标正显示上下文菜单,但用户按下ESCAPE键取消操作,这时就必须用此消息将焦点返回到任务栏通知区域。NIM_SETVERSION:指示任务栏按照相应的动态库版本工作。第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义如下:typedef struct _NOTI

2、FYICONDATA DWORD cbSize; / 结构大小(sizeof struct),必须设置 HWND hWnd; / 发送通知消息的窗口句柄 UINT uID; / 图标ID ( 由回调函数的WPARAM 指定) UINT uFlags;UINT uCallbackMessage; / 消息被发送到此窗口过程 HICON hIcon; / 任务栏图标句柄 CHAR szTip64; / 提示文本 NOTIFYICONDATA;该结构中uFlags的值分别为:#define NIF_MESSAGE 0x1 / 表示uCallbackMessage 有效 #define NIF_ICO

3、N 0x2 / 表示hIcon 有效 #define NIF_TIP 0x4 / 表示szTip 有效 在该结构的成员中,cbSize为该结构所占的字节数,hWnd为接受该图标所发出的消息的窗口的句柄(鼠标在任务栏上程序图标上动作时图标将发出消息,这个消息用户要自己定义),uID为被显示图标的ID,uFlags指明其余的几个成员(hIcon、uCallBackMessage和szTip)的值是否有效,uCallbackMessage为一个用户自定义的消息,当用户在该图标上作用一些鼠标动作时,图标将向应用程序的主框架窗口(hWnd成员中指定的窗口)发出该消息,为了使程序的主框架得到该通知消息,需

4、要设置NOTIFYICONDATA 结构的flag成员的值为NIF_MESSAGE。hIcon为将在任务栏上显示的图标句柄,szTip鼠标停留在该图标上时显示的提示字符串。尽管Shell_NotifyIcon函数简单实用,但它毕竟是个Win32 API,为此本实例将它封装在了一个C+类中,这个类叫做CTrayIcon,有了它,托盘编程会更加轻松自如,因为它隐藏了NOTIFYICONDATA、消息代码、标志以及一些繁琐的细节。二、编程步骤 1、 启动Visual C+6.0,生成一个单文档的应用程序TrayTest,取消文档视图支持;2、 在CMainFrame类中添加自定义消息#define

5、WM_MY_TRAY_NOTIFICATION WM_USER+0,并在该类中为此自定义消息手动添加消息映射ON_MESSAGE(WM_MY_TRAY_NOTIFICATION, OnTrayNotification)和消息响应函数afx_msg LRESULT OnTrayNotification(WPARAM wp, LPARAM lp);3、 设计二个图标添加到项目中,其ID标志分别为IDI_MYICON、IDI_MYICON2,作为托盘显示时的图标;4、 在CMainFrame类中添加下述变量: CTrayIcon m_trayIcon(用来操作图标的类对象)、CEdit m_wndE

6、dit(编辑框用来显示所跟踪到的鼠标消息)、int m_iWhichIcon(决定当前托盘使用哪个图标)、BOOL m_bShutdown(是否关闭当前拖盘程序标志)、BOOL m_bShowTrayNotifications(是否显示托盘消息标志);5、 为程序的IDR_MAINFRAME添加处理菜单项和托盘的上下文菜单IDI_TRAYICON(具体的菜单项的标题和ID标志符参见代码部分),然后使用Class Wizard为各个菜单项添加处理函数;6、 添加代码,编译运行程序。/CTrayIcon类的头文件;#ifndef _TRAYICON_H #define _TRAYICON_H cl

7、ass CTrayIcon : public CCmdTarget protected:DECLARE_DYNAMIC(CTrayIcon) NOTIFYICONDATA m_nid; / struct for Shell_NotifyIcon args public:CTrayIcon(UINT uID);CTrayIcon();/ Call this to receive tray notifications void SetNotificationWnd(CWnd* pNotifyWnd, UINT uCbMsg);BOOL SetIcon(UINT uID); / main varia

8、nt you want to use BOOL SetIcon(HICON hicon, LPCSTR lpTip);BOOL SetIcon(LPCTSTR lpResName, LPCSTR lpTip) return SetIcon(lpResName ?AfxGetApp()-LoadIcon(lpResName) : NULL, lpTip); BOOL SetStandardIcon(LPCTSTR lpszIconName, LPCSTR lpTip) return SetIcon(:LoadIcon(NULL, lpszIconName), lpTip);virtual LRE

9、SULT OnTrayNotification(WPARAM uID, LPARAM lEvent);#endif /CTrayIcon类的.CPP文件 #include stdafx.htrayicon.h#include / for AfxLoadString IMPLEMENT_DYNAMIC(CTrayIcon, CCmdTarget) CTrayIcon:CTrayIcon(UINT uID) memset(&m_nid, 0 , sizeof(m_nid); / Initialize NOTIFYICONDATA m_nid.cbSize = sizeof(m_nid);m_nid

10、.uID = uID; / never changes after construction AfxLoadString(uID, m_nid.szTip, sizeof(m_nid.szTip);/ Use resource string as tip if there is one CTrayIcon() SetIcon(0); / remove icon from system tray void CTrayIcon:SetNotificationWnd(CWnd* pNotifyWnd, UINT uCbMsg) / Set notification window. It must c

11、reated already. ASSERT(pNotifyWnd=NULL :IsWindow(pNotifyWnd-GetSafeHwnd();m_nid.hWnd = pNotifyWnd-GetSafeHwnd();ASSERT(uCbMsg=0 uCbMsg=WM_USER);m_nid.uCallbackMessage = uCbMsg;BOOL CTrayIcon:SetIcon(UINT uID) / Sets both the icon and tooltip from resource ID ,To remove the icon, call SetIcon(0) HICO

12、N hicon=NULL;if (uID) AfxLoadString(uID, m_nid.szTip, sizeof(m_nid.szTip);hicon = AfxGetApp()-LoadIcon(uID); return SetIcon(hicon, NULL);SetIcon(HICON hicon, LPCSTR lpTip) / Common SetIcon for all overloads. UINT msg;m_nid.uFlags = 0;if (hicon) / Set the icon msg = m_nid.hIcon ? NIM_MODIFY : NIM_ADD

13、;m_nid.hIcon = hicon; / Add or replace icon in system tray m_nid.uFlags = NIF_ICON; else if (m_nid.hIcon=NULL) / remove icon from tray return TRUE; / already deleted msg = NIM_DELETE;if (lpTip) / Use the tip, if any strncpy(m_nid.szTip, lpTip, sizeof(m_nid.szTip);if (m_nid.szTip0) m_nid.uFlags = NIF

14、_TIP;if (m_nid.uCallbackMessage & m_nid.hWnd) / Use callback if any m_nid.uFlags = NIF_MESSAGE;BOOL bRet = Shell_NotifyIcon(msg, &m_nid); / Do it if (msg=NIM_DELETE !bRet) m_nid.hIcon = NULL; / failed return bRet;LRESULT CTrayIcon:OnTrayNotification(WPARAM wID, LPARAM lEvent) if (wID!=m_nid.uID (lEv

15、ent!=WM_RBUTTONUP & lEvent!=WM_LBUTTONDBLCLK) return 0;CMenu menu;/装载上下文菜单;if (!menu.LoadMenu(m_nid.uID) CMenu* pSubMenu = menu.GetSubMenu(0);pSubMenu) if (lEvent=WM_RBUTTONUP) /设置第一个菜单项为默认菜单项目 :SetMenuDefaultItem(pSubMenu-m_hMenu, 0, TRUE);/将当前菜单作为上下文菜单;CPoint mouse;GetCursorPos(&mouse);SetForegrou

16、ndWindow(m_nid.hWnd);TrackPopupMenu(pSubMenu-m_hMenu, 0, mouse.x, mouse.y, 0,m_nid.hWnd, NULL); else / double click: execute first menu item SendMessage(m_nid.hWnd, WM_COMMAND, pSubMenu-GetMenuItemID(0), 0);return 1;/ MainFrm.h : interface of the CMainFrame class #if !defined(AFX_MAINFRM_H_9ED70A69_

17、C975_4F20_9D4E_B2877E3575D0_INCLUDED_) #define AFX_MAINFRM_H_9ED70A69_C975_4F20_9D4E_B2877E3575D0_INCLUDED_ #if _MSC_VER 1000 #pragma once #endif / _MSC_VER class CMainFrame : public CFrameWnd CMainFrame();DECLARE_DYNAMIC(CMainFrame) / Attributes / Overrides / ClassWizard generated virtual function

18、overrides /AFX_VIRTUAL(CMainFrame) /AFX_VIRTUAL / Implementation virtual CMainFrame();#ifdef _DEBUG virtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endif / control bar embedded members CStatusBar m_wndStatusBar;CTrayIcon m_trayIcon; / my tray icon CEdit m_wndEdit; / to di

19、splay tray notifications int m_iWhichIcon; / which HICON to use BOOL m_bShutdown; / OK to terminate TRAYTEST BOOL m_bShowTrayNotifications; / display info in main window / Generated message map functions /AFX_MSG(CMainFrame) afx_msg LRESULT OnTrayNotification(WPARAM wp, LPARAM lp);afx_msg int OnCrea

20、te(LPCREATESTRUCT lpCreateStruct);afx_msg void OnToggleIcon();afx_msg void OnViewClear();afx_msg void OnViewNotifications();afx_msg void OnUpdateViewClear(CCmdUI* pCmdUI);afx_msg void OnUpdateViewNotifications(CCmdUI* pCmdUI);afx_msg void OnClose();afx_msg void OnAppOpen();afx_msg void OnAppSuspend(

21、);/ NOTE - the ClassWizard will add and remove member functions here. / DO NOT EDIT what you see in these blocks of generated code!/AFX_MSG DECLARE_MESSAGE_MAP() /CMainFrm.cpp TrayTest.hMainFrm.h#ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE = _FILE_;#endif / control bar embedded mem

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1