MFC下托盘图标的实现和托盘菜单
2014-03-19 10:26
190 查看
转载自:http://blog.csdn.net/longsir2008/article/details/6304130
对话框头文件XXXDlg.h:
1.添加成员变量NOTIFYICONDATA m_nid;
2.添加tray消息响应函数的声明
afx_msg LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam);
对话框实现文件XXXDlg.cpp:
1.定义tray消息 #define UM_TRAYNOTIFY WM_USER + 11
2.CXXXDlg的构造函数添加
memset(&m_nid, 0, sizeof(m_nid)); // Initialize NOTIFYICONDATA struct
m_nid.cbSize = sizeof(m_nid);
m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
3.CXXXDlg的析构函数添加
m_nid.hIcon = NULL;
Shell_NotifyIcon(NIM_DELETE, &m_nid);
4.添加消息映射:
BEGIN_MESSAGE_MAP(CMFC2Dlg, CDialog)
//...
ON_MESSAGE(UM_TRAYNOTIFY, &CMFC2Dlg::OnTrayNotify)
//...
END_MESSAGE_MAP()
5.OnInitDialog函数添加:
m_nid.hWnd = GetSafeHwnd();
m_nid.uCallbackMessage = UM_TRAYNOTIFY;
// Set tray icon and tooltip
m_nid.hIcon = m_hIcon;
// Set tray notification tip information
CString strToolTip = _T("托盘程序");
_tcsncpy_s(m_nid.szTip, strToolTip, strToolTip.GetLength());
Shell_NotifyIcon(NIM_ADD, &m_nid);
6.OnTrayNotify函数的实现:
LRESULT CXXXDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
UINT uMsg = (UINT)lParam;
switch(uMsg)
{
case WM_RBUTTONUP:
{
//右键处理
CMenu menuTray;
CPoint point;
int id;
GetCursorPos(&point);
menuTray.LoadMenu(IDR_MENU_TRAY);
id = menuTray.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
#if 0
CString strInfo;
strInfo.Format(L"menuid %d", id);
LPCTSTR strtmp;
strtmp = strInfo.GetBuffer(0);
MessageBox(strtmp, L"test");
#endif
switch(id){
case IDR_TRAY_EXIT:
OnOK();
break;
case IDR_TRAY_RESTORE:
//窗口前端显示
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
default:
break;
}
break;
}
case WM_LBUTTONDBLCLK:
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
default:
break;
}
return 0;
}
7.添加WM_SIZE消息处理:
void CMFC2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(nType == SIZE_MINIMIZED){
ShowWindow(SW_HIDE);
}
}
8.菜单。
添加菜单资源 , 比如IDR_MENU_TRAY.
定义一个子菜单Tray,有若干个菜单项,比如“恢复窗口”, ID是IDR_TRAY_RESTORE,“退出”, ID是IDR_TRAY_EXIT。
在OnTrayNotify函数中捕获右击消息,弹出菜单,参考第6步。
至此,添加托盘的功能基本完成。
对话框头文件XXXDlg.h:
1.添加成员变量NOTIFYICONDATA m_nid;
2.添加tray消息响应函数的声明
afx_msg LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam);
对话框实现文件XXXDlg.cpp:
1.定义tray消息 #define UM_TRAYNOTIFY WM_USER + 11
2.CXXXDlg的构造函数添加
memset(&m_nid, 0, sizeof(m_nid)); // Initialize NOTIFYICONDATA struct
m_nid.cbSize = sizeof(m_nid);
m_nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
3.CXXXDlg的析构函数添加
m_nid.hIcon = NULL;
Shell_NotifyIcon(NIM_DELETE, &m_nid);
4.添加消息映射:
BEGIN_MESSAGE_MAP(CMFC2Dlg, CDialog)
//...
ON_MESSAGE(UM_TRAYNOTIFY, &CMFC2Dlg::OnTrayNotify)
//...
END_MESSAGE_MAP()
5.OnInitDialog函数添加:
m_nid.hWnd = GetSafeHwnd();
m_nid.uCallbackMessage = UM_TRAYNOTIFY;
// Set tray icon and tooltip
m_nid.hIcon = m_hIcon;
// Set tray notification tip information
CString strToolTip = _T("托盘程序");
_tcsncpy_s(m_nid.szTip, strToolTip, strToolTip.GetLength());
Shell_NotifyIcon(NIM_ADD, &m_nid);
6.OnTrayNotify函数的实现:
LRESULT CXXXDlg::OnTrayNotify(WPARAM wParam, LPARAM lParam)
{
UINT uMsg = (UINT)lParam;
switch(uMsg)
{
case WM_RBUTTONUP:
{
//右键处理
CMenu menuTray;
CPoint point;
int id;
GetCursorPos(&point);
menuTray.LoadMenu(IDR_MENU_TRAY);
id = menuTray.GetSubMenu(0)->TrackPopupMenu(TPM_RETURNCMD | TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this);
#if 0
CString strInfo;
strInfo.Format(L"menuid %d", id);
LPCTSTR strtmp;
strtmp = strInfo.GetBuffer(0);
MessageBox(strtmp, L"test");
#endif
switch(id){
case IDR_TRAY_EXIT:
OnOK();
break;
case IDR_TRAY_RESTORE:
//窗口前端显示
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
default:
break;
}
break;
}
case WM_LBUTTONDBLCLK:
SetForegroundWindow();
ShowWindow(SW_SHOWNORMAL);
break;
default:
break;
}
return 0;
}
7.添加WM_SIZE消息处理:
void CMFC2Dlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if(nType == SIZE_MINIMIZED){
ShowWindow(SW_HIDE);
}
}
8.菜单。
添加菜单资源 , 比如IDR_MENU_TRAY.
定义一个子菜单Tray,有若干个菜单项,比如“恢复窗口”, ID是IDR_TRAY_RESTORE,“退出”, ID是IDR_TRAY_EXIT。
在OnTrayNotify函数中捕获右击消息,弹出菜单,参考第6步。
至此,添加托盘的功能基本完成。
相关文章推荐
- MFC 系统托盘图标实现,包括双击图标和右键图标菜单
- MFC下托盘图标的实现和托盘菜单
- MFC实现托盘图标及弹出菜单(Popup menu)
- MFC下托盘图标的实现和托盘菜单
- 强!简洁!SWT实现任务栏图标(系统托盘),带菜单和ToolTip
- SWT实现任务栏图标(系统托盘),带菜单和ToolTip
- 强!简洁!SWT实现任务栏图标(系统托盘),带菜单和ToolTip
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- VC++任务栏托盘图标及右键菜单实现
- SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
- VC/MFC图标菜单(菜单图标)的实现
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- vc托盘图标的实现以及托盘右键菜单的响应
- MFC窗口实现最小化到托盘 右键菜单和还原
- mfc实现托盘图标
- 托盘图标和弹出菜单的实现
- C#软件开发实例.私人订制自己的屏幕截图工具(三)托盘图标及菜单的实现
- 17.VC(ui)-托盘图标和弹出菜单的实现(随手代码)
- MFC程序任务栏托盘图标的实现
- MFC中菜单图标的实现