窗口隐藏至通知区域
窗口隐藏至通知区域的主要代码:
void CM2sDlg::OnButtonM()
{
ShowWindow(SW_HIDE);
//////////////////定义系统托盘///////////////////////////
m_tnid.cbSize=sizeof(NOTIFYICONDATA);//设置结构大小//
m_tnid.hWnd=this->m_hWnd;//设置图标对应的窗口
m_tnid.uFlags=NIF_MESSAGE|NIF_ICON|NIF_TIP;//图标属性
m_tnid.uCallbackMessage=MYWM_NOTIFYICON;//应用程序定义的回调消息ID
////////////设置NOTIFYICONDATA结构///////////
CString szToolTip;
szToolTip=_T("隐藏至通知区域-程序");
_tcscpy(m_tnid.szTip, szToolTip);//帮助信息
m_tnid.uID=IDR_MAINFRAME;//应用程序图标
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_tnid.hIcon=hIcon;//图标句柄
PNOTIFYICONDATA m_ptnid=&m_tnid;
::Shell_NotifyIcon(NIM_ADD,m_ptnid);//增加图标到系统盘
if(hIcon)::DestroyIcon(hIcon);
}
在窗口函数中处理鼠标点击通知区域图标(双击显示窗口,右击弹出菜单):
LRESULT CM2sDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case MYWM_NOTIFYICON:
//如果是用户定义的消息
if(lParam==WM_LBUTTONDBLCLK)
{
//鼠标双击时主窗口出现
AfxGetApp()->m_pMainWnd->ShowWindow(SW_SHOW);
}
else if(lParam==WM_RBUTTONDOWN) //鼠标右键单击弹出选单
{
CMenu menu;
menu.LoadMenu(IDR_MENU1); //载入事先定义的选单
CMenu *pMenu=menu.GetSubMenu(0);
CPoint pos;
GetCursorPos(&pos);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd());
}
break;
case WM_SYSCOMMAND:
//如果是系统消息
break;
}
return CDialog::WindowProc(message, wParam, lParam);
}
ps:1.m_tnid是NOTIFYICONDATA结构体---Contains information that the system needs to process taskbar status area messages.
2.Shell_NotifyIcon---Sends a message to the taskbar's status area.添加或删除图标到通知区域等功能的函数。