1.定义全局变量和消息
NOTIFYICONDATA nid;
#define WM_ICONNOTIFY WM_USER + 909 // 图标响应消息(lParam)
#define ID_TASKBARICON 100 // 参数(wParam)
/**/ /////
#define WM_ICONNOTIFY WM_USER + 909 // 图标响应消息(lParam)
#define ID_TASKBARICON 100 // 参数(wParam)
/**/ /////
2。编写onsize事件函数
void
CMainFrame::OnSize(UINT nType,
int
cx,
int
cy)
... {
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if ( nType == SIZE_MINIMIZED)
...{
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;;
nid.uID = ID_TASKBARICON; //发出的消息中的wParam参数
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip, "聊天");
Shell_NotifyIcon(NIM_ADD, &nid); //加入图标
ShowWindow(SW_HIDE); //隐藏窗体
}
}
... {
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
if ( nType == SIZE_MINIMIZED)
...{
//初始化系统托盘图标
nid.cbSize = sizeof(NOTIFYICONDATA);
nid.hWnd = m_hWnd;;
nid.uID = ID_TASKBARICON; //发出的消息中的wParam参数
nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nid.uCallbackMessage = WM_ICONNOTIFY; //点击托盘图标系统发出的消息(即发出的消息中的lParam参数)
nid.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
strcpy(nid.szTip, "聊天");
Shell_NotifyIcon(NIM_ADD, &nid); //加入图标
ShowWindow(SW_HIDE); //隐藏窗体
}
}
附加:如果要改变程序的风格可以添加下面代码
void CYOUclass::OnShowWindow(BOOL bShow, UINT nStatus)
{
CPropertySheet::OnShowWindow(bShow, nStatus);
this->ModifyStyle(WS_POPUP ,/*WS_MAXIMIZEBOX|*/WS_MINIMIZEBOX/*|WS_OVERLAPPEDWINDOW*/);
this->ModifyStyleEx(WS_EX_DLGMODALFRAME,WS_EX_OVERLAPPEDWINDOW );
// TODO: 在此处添加消息处理程序代码
}
3。编写自定义的消息
LRESULT CMainFrame::onNotifyIcon(WPARAM wparam , LPARAM lparam)
... {
POINT rpoint;
CMenu tmenu;
GetCursorPos(&rpoint);
//如果在托盘图标上双击左键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_LBUTTONDBLCLK ) )
...{
ShowWindow(SW_SHOW); //显示窗体
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &nid); //删除系统托盘图标
}
//如果在托盘图标上双击右键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_RBUTTONDOWN ) )
...{
tmenu.LoadMenu(IDR_MAINFRAME); //加载系统主菜单
SetForegroundWindow(); //将程序置于桌面顶部
tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在点击图标处弹出系统菜单的第一项
}
return 0;
}
... {
POINT rpoint;
CMenu tmenu;
GetCursorPos(&rpoint);
//如果在托盘图标上双击左键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_LBUTTONDBLCLK ) )
...{
ShowWindow(SW_SHOW); //显示窗体
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &nid); //删除系统托盘图标
}
//如果在托盘图标上双击右键
if ( ( wparam == ID_TASKBARICON ) && ( lparam == WM_RBUTTONDOWN ) )
...{
tmenu.LoadMenu(IDR_MAINFRAME); //加载系统主菜单
SetForegroundWindow(); //将程序置于桌面顶部
tmenu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,rpoint.x, rpoint.y, this); //在点击图标处弹出系统菜单的第一项
}
return 0;
}