任务栏图标和右键菜单
来源:互联网 发布:淘宝皇冠多少信誉 编辑:程序博客网 时间:2024/05/22 14:01
任务栏图标
1)定义CallbackMessage消息WM_MYNOTIFYICON
2)定义NOTIFYICONDATA m_nid并初始化, 其中m_nid.uCallbackMessage = WM_MYNOTIFYICON
3)添加WM_MYNOTIFYICON的消息处理函数LRESULT OnMyNotifyIcon(WPARAM, LPARAM)
4)Shell_NotifyIcon (NIM_ADD, &m_nid)添加
5)注册并处理TaskbarCreated消息来重建图标LRESULT OnTaskBarCreated(WPARAM, LPARAM)
6)Shell_NotifyIcon(NIM_DELETE, &m_nid);删除图标
右键菜单
Method - 1
1)添加菜单资源(ID,菜单项显示的文本)
2)添加菜单项处理函数,如OnContextmenuShowHide
3)加载菜单资源m_oMyMenu.LoadMenu(IDR_MYCONTEXTMENU)
4)显示菜单pMenuContext->TrackPopupMenu
Method - 2
1)定义菜单项ID
2)创建菜单oPopupMenu.CreatePopupMenu()
3)添加菜单项oPopupMenu.AppendMenu(flag, ID, 文本)
4)显示菜单oPopupMenu.TrackPopupMenu
5)销毁菜单oPopupMenu.DestroyMenu();
.h文件部分
class CMyClientDlg : public CDialogEx{... ...public: afx_msg void OnClose(); afx_msg void OnContextmenuShowHide(); afx_msg LRESULT OnMyNotifyIcon(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTaskBarCreated(WPARAM wParam, LPARAM lParam);private: BOOL InitialBarIcons(); BOOL ShowBalloonTip(LPCTSTR szInfo, LPCTSTR szInfoTitle=_T("title"), DWORD dwInfoFlags = NIIF_INFO); NOTIFYICONDATA m_nid; CMenu m_oMyMenu;//Menu Method 1 }
.cpp文件部分
#define WM_MYNOTIFYICON (WM_USER + 100)//重启explorer.exe时重建任务栏图标const UINT WM_TASKBARCREATED = ::RegisterWindowMessage(_T("TaskbarCreated"));BEGIN_MESSAGE_MAP(CMyClientDlg, CDialogEx) ... ... ON_WM_CLOSE() ON_MESSAGE(WM_MYNOTIFYICON, &CMyClientDlg::OnMyNotifyIcon) ON_REGISTERED_MESSAGE(WM_TASKBARCREATED, &CMyClientDlg::OnTaskBarCreated) ON_COMMAND(ID_CONTEXTMENU_SHOW_HIDE, &CMyClientDlg::OnContextmenuShowHide)END_MESSAGE_MAP()BOOL CMyClientDlg::OnInitDialog(){... ...InitialBarIcons();... ...}BOOL CMyClientDlg::InitialBarIcons(){//创建任务栏图标,初始化右键菜单 m_nid.cbSize =sizeof(NOTIFYICONDATA); m_nid.hWnd =m_hWnd; m_nid.uID = 0; m_nid.hIcon =m_hIcon; m_nid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP|NIF_INFO; m_nid.uCallbackMessage = WM_MYNOTIFYICON; _tcscpy_s(m_nid.szTip, _T("Dictionary - Client")); _tcscpy_s(m_nid.szInfo, _T("Dictionary Client is running")); _tcscpy_s(m_nid.szInfoTitle, _T("Dictionary Client")); m_nid.dwInfoFlags = NIIF_INFO; m_nid.uTimeout = 1500; if(NULL == m_oMyMenu.GetSafeHmenu())//Menu - Method 1 m_oMyMenu.LoadMenu(IDR_MYCONTEXTMENU);//menu for bar return Shell_NotifyIcon (NIM_ADD, &m_nid);}BOOL CMyClientDlg::ShowBalloonTip(LPCTSTR szInfo, LPCTSTR szInfoTitle, DWORD dwInfoFlags /*= NIIF_INFO*/){//显示气泡通知 m_nid.cbSize = sizeof(NOTIFYICONDATA); m_nid.uFlags = NIF_INFO; _tcscpy_s(m_nid.szInfo, szInfo); _tcscpy_s(m_nid.szInfoTitle, szInfoTitle); m_nid.dwInfoFlags = dwInfoFlags;//NIIF_INFO; m_nid.uTimeout = 1500;//deprecated as of Windows Vista return Shell_NotifyIcon(NIM_MODIFY, &m_nid);}LRESULT CMyClientDlg::OnTaskBarCreated(WPARAM wParam, LPARAM lParam){//重建任务栏图标 InitialBarIcons(); return 0;}void CMyClientDlg::OnClose(){//退出时删除托盘图标 Shell_NotifyIcon(NIM_DELETE, &m_nid); CDialogEx::OnClose();}void CMyClientDlg::OnContextmenuShowHide(){//右键菜单响应 if(IsWindowVisible ()) ShowWindow (SW_HIDE ); else ShowWindow (SW_SHOWNORMAL );}LRESULT CMyClientDlg::OnMyNotifyIcon(WPARAM wParam, LPARAM lParam){ switch(lParam) { case WM_LBUTTONDBLCLK://双击托盘图标, 显示窗体 ShowWindow (SW_SHOWNORMAL ); SetForegroundWindow(); break; case WM_RBUTTONUP://右键, 弹出菜单 { //Method 1 - use Menu resource: m_oMyMenu.LoadMenu(IDR_MYCONTEXTMENU) //CMenu* pMenuContext = m_oMyMenu.GetSubMenu(0); //if(NULL != pMenuContext) //{ // CPoint pos; // GetCursorPos(&pos); // SetForegroundWindow();//加这句是为了鼠标点击其他地方时,弹出的菜单能够消失 // pMenuContext->TrackPopupMenu(TPM_RIGHTBUTTON |TPM_RIGHTALIGN, pos.x+1, pos.y+1, this); //} //Method 2 - Add when need CMenu oPopupMenu; if(!oPopupMenu.CreatePopupMenu()||NULL == oPopupMenu.GetSafeHmenu()) return 0; oPopupMenu.AppendMenu(0/*MF_STRING|MF_POPUP|MF_DISABLED|MF_GRAYED*/, ID_CONTEXTMENU_SHOW_HIDE, _T("Show/HIde")); oPopupMenu.AppendMenu(MF_SEPARATOR); oPopupMenu.AppendMenu(0/*MF_STRING|MF_POPUP|MF_DISABLED|MF_GRAYED*/, ID_APP_EXIT, _T("Exit")); CPoint pos; GetCursorPos(&pos); SetForegroundWindow();//加这句是为了鼠标点击其他地方时,弹出的菜单能够消失 oPopupMenu.TrackPopupMenu(TPM_RIGHTBUTTON |TPM_RIGHTALIGN, pos.x+1, pos.y+1, this); oPopupMenu.DestroyMenu(); } break; } return 0;}
0 0
- 任务栏图标和右键菜单
- VC++任务栏托盘图标及右键菜单实现
- QT 创建托盘图标和右键菜单
- QT 创建托盘图标和右键菜单
- 在IE右键添加菜单项和任务栏按钮
- windows中的任务栏右键菜单
- SWT实现任务栏图标(系统托盘),带菜单和ToolTip
- C#图标入任务栏,右键程序
- MyEclipse Web 项目的图标和右键New菜单
- (WPF)通知栏图标和右键菜单
- C#增加任务栏系统右键菜单项目
- C#给任务栏右键菜单增加按钮
- c#中添加Windows任务栏右键菜单
- winfrom 在任务栏上的右键菜单
- MFC 无标题窗口移动、任务栏右键菜单
- ubuntu任务栏|右键菜单|窗口透明
- MFC 系统托盘图标实现,包括双击图标和右键图标菜单
- Qt右键弹出菜单+图标
- linearlayout实现fragment切换
- 基于注解的SpringMVC简单介绍
- 单例设计模式(Singleton Pattern)完全解析
- Java编程开发设计模式之--装饰者模式(Decorator)与代理模式(Proxy)
- 自定义Dialog出现黑色背景,去除策略
- 任务栏图标和右键菜单
- Clang Attributes 苹果iOS 未尝试过代码
- JS自定义Title文字提示
- 产品经理之定价框架和策略
- oracle调用JAVA类的方法 (第二种方法测试不行)
- java Collection
- 设置button的边框和颜色
- 【剑指offer】(扩展)两个队列实现栈
- 26岁的我的一点感慨