原创 为了用托盘图标你需要用一个shell函数 :

2009-2-7 15:36 2119 2 2 分类: 软件与OS

来自http://blog.sina.com.cn/s/blog_4bcca768010006wl.html



为了用托盘图标你需要用一个shell函数 :


The dwMessage 可选的参数包括 the NIM_ADD,NIM_DELETE and NIM_MODIFY功能分别是添加删除以及修改图标于系统图标.


PNOTIFYICONDATA 结构包括这些系统需要处理的任务图标状态区域消息等信息.
typedef  struct _NOTIFYICONDATA {
    DWORD cbSize;
    HWND hWnd;
    UINT uID;
    UINT uFlags;
    UINT uCallbackMessage;
    HICON hIcon;
    #if (_WIN32_IE < 0x0500)
        TCHAR szTip[64];
    #else
        TCHAR szTip[128];
    #endif    #if (_WIN32_IE >= 0x0500)
        DWORD dwState;
        DWORD dwStateMask;
        TCHAR szInfo[256];
       union {
            UINT  uTimeout;
            UINT  uVersion;
        } DUMMYUNIONNAME;
        TCHAR szInfoTitle[64];
        DWORD dwInfoFlags;
    #endif    #if (_WIN32_IE >= 0x600)
        GUID guidItem;
    #endif
} NOTIFYICONDATA, *PNOTIFYICONDATA;


Step: 1


自定义消息于 TrayMinDlg.h 头文件.


The WM_USER 常量用来帮助用户定义自己的消息被用来建立个人的窗口类, 定义时通常用这种格式 WM_USER+X, 这里 X 是一个整形变量.


*更详细的看MSDN


Step: 2


现在在Now add the DECLARE_MESSAGE_MAP() 之前添加下面的用户函数吧TrayMinDlg.h file)   afx_msg void OnTrayNotify(WPARAM wParam, LPARAM lParam);
 



当添加一个图标到托盘时这有一个图标的回调消息,注意到 NOTIFYICONDATA 结构中有uCallbackMessage成员是回调消息识别的关键,它会被传给NIM_ADD(我们之后将会见到更详细的)。当添加托盘图标这个事件发生时,系统发送一个回调函数到由hWnd成员对象指定的窗口过程(winproc),wParam 参数可以用来被识别究竟发生了什么操作。lParam参数存放发生事件相关的鼠标或者键盘消息。举个例子,当一个鼠标指针指向一个托盘图标,lParam将包括WM_MOUSEMOVE


Step: 3



现在添加下面的这行在消息宏中(MessageMap)在TrayMinDlg.cpp

ON_MESSAGE(WM_TRAY_MESSAGE,OnTrayNotify)
 


现在应该是这样的.


Step: 4


现在在TrayMinDlg.cpp 定义OnTrayNotify函数,不要忘记在函数头部添加afx_msg。


Step: 5


现在在TrayMinDlg类添加两个成员函数来相应鼠标事件。


实现鼠标左键单击的相应



  • 函数类型:void  
  • 函数声明: OnTrayLButtonDown(CPoint pt)

实现鼠标右键单击的相应



  • 函数类型: void
  • 函数声明: OnTrayRButtonDown(CPoint pt)

OnTrayLButtonDown(CPoint pt)的定义如下.


The Declaration of OnTrayRButtonDown(CPoint pt) is as following.


Step: 6


Add two member variable to the CTrayMinDlg.
为CTrayMinDlg添加两个成员变量



  • Variable Type: NOTIFYICONDATA
  • Variable Name: m_TrayData;
  • Variable Type: CMenu
  • Variable Name: m_menu;


现在添加菜单资源


Step: 7


现在画一个最小化的按钮在对话框设计中
并且添加这个按钮的执行函数


Step: 8



在退出菜单的执行函数写下如下

Shell_NotifyIcon(NIM_DELETE,&m_TrayData);
  DestroyWindow();

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
2
关闭 站长推荐上一条 /3 下一条