VC6系统托盘功能实现
I.相关数据结构及其API实现函数
Shell_NotifyIcon
WINSHELLAPI BOOL WINAPI Shell_NotifyIcon(
DWORD dwMessage,
PNOTIFYICONDATA pnid
);
Sends a message to the system to add, modify, or delete an icon from the taskbar status area. 发送一个消息给系统,从任务栏状态区域添加,修改,或者删除一个ICON图标。
<!--[if !supportLists]-->· <!--[endif]-->Returns nonzero if successful, or zero otherwise.
dwMessage
Message value to send. This parameter can be one of these values:
NIM_ADD
Adds an icon to the status area.
NIM_DELETE
Deletes an icon from the status area.
NIM_MODIFY
Modifies an icon in the status area.
pnid
Address of a NOTIFYICONDATA structure. The content of the structure depends on the value of dwMessage.
NOTIFYICONDATAtypedef struct _NOTIFYICONDATA {
DWORD cbSize;
HWND hWnd;
UINT uID;
UINT uFlags;
UINT uCallbackMessage;
HICON hIcon;
char szTip[64];
} NOTIFYICONDATA, *PNOTIFYICONDATA;
Contains information that the system needs to process taskbar status area messages. 这个结构包含了系统处理来自任务栏状态区域的消息时所需要的信息。
cbSize
Size of this structure, in bytes. 这个结构都大小,用sizeof来初始化即可。
hWnd
Handle to the window that will receive notification messages associated with an icon in the taskbar status area. 用来接受任务状态栏所发出的消息的窗口的句柄。
uID
Application-defined identifier of the taskbar icon.任务栏图标的用户定义的标识。
uFlags
Array of flags that indicate which of the other members contain valid data. This member can be a combination of the following:
指出其他的哪个成员是有效数据。
NIF_ICON
The hIcon member is valid.
NIF_MESSAGE
The uCallbackMessage member is valid.
NIF_TIP
The szTip member is valid.
uCallbackMessage
Application-defined message identifier. The system uses this identifier for notification messages that it sends to the window identified in hWnd. These notifications are sent when a mouse event occurs in the bounding rectangle of the icon.
应用程序(即用户自定义)定义的消息标识,当鼠标事件在ICON图标周围发生时发送这个消息给hWnd窗口。
hIcon
Handle to the icon to add, modify, or delete. 要添加,修改,和删除的icon图标的句柄。
szTip
Tooltip text to display for the icon. icon鼠标停留在该图标上时显示的提示字符串
2具体实现
假如在对话框的双击相应函数中实现:
void CMyDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ShowWindow(SW_HIDE);//隐藏对话框主界面。
char tip[64]="双击显示谭高文的定时程序主界面";
NOTIFYICONDATA data;
data.cbSize =sizeof(NOTIFYICONDATA); 初始化这个结构的大小
data.hWnd =m_hWnd; //用当前的对话框句柄来初始化接受消息的窗口。
data.uID =IDI_ICON1; 自定义的ICON图标。
data.uFlags =NIF_ICON |NIF_MESSAGE|NIF_TIP; 设定有效成员。
data.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1)); 装载并设定ICON图标的句柄。
data.uCallbackMessage =WM_DBICON;自定义的消息。
strcpy(data.szTip ,tip); 设定当鼠标一移动到ICON托盘图标上面时的提示信息。
Shell_NotifyIcon(NIM_ADD,&data); 调用在右下角系统托盘添加结构中指定的图标。
CDialog::OnLButtonDblClk(nFlags, point);
}
关于自定义消息的方法:
一.#define WM_DBICON WM_USER+50
二.在 *。H文件的 {{AFX_MSG(CMyDlg)和//}}AFX_MSG注释宏之后添加afx_msg void ondbicon(WPARAM wParam,LPARAM lParam);
这是一个相应函数声明。
三.在BEGIN_MESSAGE_MAP(CMyDlg, CDialog)和
END_MESSAGE_MAP()之间,在 //}}AFX_MSG_MAP之后添加:
ON_MESSAGE(WM_DBICON,ondbicon)这是一个消息跟相应函数的关联。
四. 相应函数的实现;
void CMyDlg::ondbicon(WPARAM wParam,LPARAM lParam)
{
if(lParam==WM_LBUTTONDBLCLK)如果是双击。如果没有添加这个判断语句,那么只要鼠标移动到系统托盘上面的ICON图标就会相应这个消息的显示主界面,删除图标。
{
ShowWindow(SW_SHOW);//显示主界面。
NOTIFYICONDATA data;
data.cbSize =sizeof(NOTIFYICONDATA);
data.hWnd =m_hWnd;
data.uID =IDI_ICON1;
data.uFlags =NIF_ICON |NIF_MESSAGE;
data.hIcon =LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_ICON1));
data.uCallbackMessage =WM_DBICON;
Shell_NotifyIcon(NIM_DELETE,&data);删除ICON图标。
}
}