来自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;
自定义消息于 TrayMinDlg.h 头文件.
The WM_USER
常量用来帮助用户定义自己的消息被用来建立个人的窗口类, 定义时通常用这种格式 WM_USER+X
, 这里 X 是一个整形变量.
*更详细的看MSDN
现在在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
现在添加下面的这行在消息宏中(MessageMap)在TrayMinDlg.cpp
ON_MESSAGE(WM_TRAY_MESSAGE,OnTrayNotify)
现在应该是这样的.
现在在TrayMinDlg.cpp 定义OnTrayNotify函数,不要忘记在函数头部添加afx_msg。
现在在TrayMinDlg类添加两个成员函数来相应鼠标事件。
实现鼠标左键单击的相应
函数类型:void
函数声明:
OnTrayLButtonDown(CPoint pt) 实现鼠标右键单击的相应
void
OnTrayRButtonDown(CPoint pt)
OnTrayLButtonDown(CPoint pt)的定义如下
.
The Declaration of OnTrayRButtonDown(CPoint pt)
is as following.
Add two member variable to the CTrayMinDlg
.
为CTrayMinDlg添加两个成员变量
NOTIFYICONDATA
m_TrayData
; CMenu
m_menu
;
现在添加菜单资源
现在画一个最小化的按钮在对话框设计中
并且添加这个按钮的执行函数
在退出菜单的执行函数写下如下
Shell_NotifyIcon(NIM_DELETE,&m_TrayData);
DestroyWindow();
文章评论(0条评论)
登录后参与讨论