添加和删除系统托盘图标:
-
//需要添加一个成员变量
-
NOTIFYICONDATA m_nd; //NOTIFYICONDATA结构
-
-
/***************************************
-
* 将图标加入系统托盘
-
* 参数:
-
* hWnd - 窗体句柄
-
* hIcon - 所要加入的图标句柄
-
* title - 悬停于系统托盘之上时所要显示的消息
-
* uCallbackMessage - 消息标识(需用户自己定义消息)
-
***************************************/
-
void CMyDlg:: AddIcon (HWND hWnd, HICON hIcon, UINT uCallbackMessage, char *title )
-
{
-
m_nd. cbSize = sizeof (NOTIFYICONDATA );
-
m_nd. hWnd = hWnd;
-
m_nd. uID = IDR_MAINFRAME;
-
m_nd. uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
-
m_nd. uCallbackMessage = uCallbackMessage;
-
m_nd. hIcon = hIcon;
-
strcpy (m_nd. szTip, title );
-
Shell_NotifyIcon (NIM_ADD, &m_nd ); //加入图标
-
}
-
-
//删除系统托盘图标
-
void CMyDlg:: RemoveIcon ( )
-
{
-
Shell_NotifyIcon (NIM_DELETE, &m_nd );
-
}
下面就是为图标添加自己的响应消息:
-
//用户定义的消息(在相应头文件中加入)
-
#define MYWM_NOTIFYICON WM_USER+1
-
-
//添加WinProc消息函数
-
LRESULT CMyCatchScreenDlg:: WindowProc (UINT message, WPARAM wParam, LPARAM lParam )
-
{
-
// TODO: Add your specialized code here and/or call the base class
-
switch (message )
-
{
-
case MYWM_NOTIFYICON:
-
//如果是用户定义的消息
-
if (lParam==WM_LBUTTONDOWN )
-
{
-
//添加自己的函数
-
-
//鼠标单击图标时主窗口出现
-
//ShowMyWindow();
-
}
-
else if (lParam==WM_RBUTTONDOWN )
-
{
-
//添加自己的函数
-
-
//鼠标右键单击弹出选单
-
/*
-
CMenu menu;
-
menu.LoadMenu(IDR_MY_MENU); //载入事先定义的选单
-
CMenu*pMenu=menu.GetSubMenu(0);
-
CPoint pos;
-
GetCursorPos(&pos);
-
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
-
*/
-
}
-
break;
-
}
-
return CDialog:: WindowProc (message, wParam, lParam );
-
}
调用演示:
-
void CMyDlg:: ShowMyWindow ( )
-
{
-
RemoveIcon ( ); //删除系统图标
-
ShowWindow (SW_SHOW ); //显示窗口
-
}
-
-
void CMyDlg:: HideMyWindow ( )
-
{
-
ShowWindow (SW_HIDE ); //隐藏窗口
-
AddIcon (m_hWnd,m_hIcon,MYWM_NOTIFYICON, “MyDlg” ); //添加系统图标
-
}