vc学习之关于缩放到托盘区
2006-03-02 10:01
176 查看
昨天为了这个缩放调了很长时间,非常郁闷的发现最终导致为题的只是没有映射消息,现在我把最终代码的实现贴出来看看
1、增加自定义消息、图标
#define WM_NOTIFYICON WM_USER+5
#define IDI_ICON 0x0005
2、增加响应函数
在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、大功告成
有一个优点,可以及时地删除托盘区的图标,不会造成延时
1、增加自定义消息、图标
#define WM_NOTIFYICON WM_USER+5
#define IDI_ICON 0x0005
2、增加响应函数
在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、大功告成
有一个优点,可以及时地删除托盘区的图标,不会造成延时
相关文章推荐
- VC 关于Web Browser控件操作IE,网页缩放功能实现。。
- 【零基础学习DirectX】之一:编译Freakout.cpp——关于 VC++ 配置SDK的说明
- [转]Ultra Fractal教程系列32——关于变换的学习07——缩放图层
- 关于VC++中FindWindow的学习!
- 好多关于C语言,VC++学习的资料
- 自学——关于实现双指缩放的学习总结
- 实习期间关于VC/C++的一点学习笔记
- 关于VC++_MFC的学习心得
- VC学习资料收集(7):关于《连连看》的算法
- Qt学习(八) 关于托盘菜单不消失的问题
- 关于新手学习VC/MFC的前途的讨论
- 孙鑫VC学习笔记:第十三讲 关于释放内存
- VC学习资料收集(2):关于数据类型转换
- 关于VC++中FindWindow的学习!
- VC学习四:关于 BSTR, CComBSTR and _bstr_t
- 关于vc中坐标映射的学习心得
- VC学习摘要1——关于windows程序的一般原理
- 关于VC2005的学习感言
- 关于VC中CListControl的不断插入和删除后内存不减的解决办法。