VC下添加和删除自己系统托盘图标,及托盘事件的响应

作者:Wupei  |  发表时间:  |  所属分类:VC

添加和删除系统托盘图标:

//需要添加一个成员变量
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");	//添加系统图标
}

Trackback from your site.

请在这里留言: