本文共 2086 字,大约阅读时间需要 6 分钟。
昨天为了这个缩放调了很长时间,非常郁闷的发现最终导致为题的只是没有映射消息,现在我把最终代码的实现贴出来看看
1、增加自定义消息、图标
#define WM_NOTIFYICON WM_USER+5#define IDI_ICON 0x00052、增加响应函数
在DECLARE_MESSAGE_MAP()前面增加 afx_msg void OnNotifyIcon(WPARAM wParam, LPARAM lParam);3、增加消息映射
ON_MESSAGE(WM_NOTIFYICON,OnNotifyIcon)4、增加消息映射函数体
void CGateWayMonitorDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam){ if (wParam == IDI_ICON ) { //响应不同的消息 switch(lParam) { case WM_LBUTTONDOWN: ShowWindow(SW_SHOWNORMAL); this->SetActiveWindow(); IconRemoveFromTray(); break; case WM_RBUTTONDOWN: //弹出右键菜单 //PopupRightMenu(IDR_MENU); CMenu menu; CPoint pos; menu.LoadMenu(IDR_MENU_TRAY_POP); //菜单 //载入事先定义的菜单 CMenu* pMenu=menu.GetSubMenu(0);GetCursorPos(&pos);
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,pos.x,pos.y,AfxGetMainWnd()); break; } }}5、增加托盘区变量
NOTIFYICONDATA m_nd;//便于删除6、增加函数
BOOL CGateWayMonitorDlg::IconAddToTray(CString strTitle){ BOOL bReturn;bReturn = FALSE;
// 将图标放入系统托盘
m_nd.cbSize = sizeof (NOTIFYICONDATA); m_nd.hWnd = m_hWnd; m_nd.uID = IDI_ICON; m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; m_nd.uCallbackMessage= WM_NOTIFYICON; m_nd.hIcon = m_hIcon;if (strTitle == "") strTitle = "网关监视进程";
strcpy(m_nd.szTip, strTitle);
bReturn = Shell_NotifyIcon(NIM_ADD, &m_nd);if (bReturn == TRUE)
{ ShowWindow(SW_HIDE); } else { AfxMessageBox("将窗口缩放到托盘区失败!失败原因:未知"); } return bReturn;}7、增加加入到托盘区函数
BOOL CGateWayMonitorDlg::IconAddToTray(CString strTitle){ BOOL bReturn;bReturn = FALSE;
// 将图标放入系统托盘
m_nd.cbSize = sizeof (NOTIFYICONDATA); m_nd.hWnd = m_hWnd; m_nd.uID = IDI_ICON; m_nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; m_nd.uCallbackMessage= WM_NOTIFYICON; m_nd.hIcon = m_hIcon;if (strTitle == "") strTitle = "网关监视进程";
strcpy(m_nd.szTip, strTitle);
bReturn = Shell_NotifyIcon(NIM_ADD, &m_nd);if (bReturn == TRUE)
{ ShowWindow(SW_HIDE); } else { AfxMessageBox("将窗口缩放到托盘区失败!失败原因:未知"); } return bReturn;}8、增加删除托盘区图标函数
BOOL CGateWayMonitorDlg::IconRemoveFromTray(){ //将图标从托盘区删除 BOOL bReturn;bReturn = Shell_NotifyIcon(NIM_DELETE, &m_nd);
return bReturn;}9、在需要调用的地方 写入
IconAddToTray("");10、大功告成
有一个优点,可以及时地删除托盘区的图标,不会造成延时
转载地址:http://gzwni.baihongyu.com/