让一个程序托盘显示,并且右键托盘图标可以弹出菜单
来源:互联网 发布:怎样不让数据自动连接 编辑:程序博客网 时间:2024/05/16 17:17
1. 在对话框类中添加一个NOTIFYICONDATA变量:
1
NOTIFYICONDATA m_Nid;
2. 初始化NOTIFYICONDATA变量
1
2
3
4
5
6
7
8
9
//初始化NOTIFYICONDATA
m_Nid.cbSize =
sizeof
(NOTIFYICONDATA);
//指定结构体大小
m_Nid.hWnd = m_hWnd;
//指定接收通告消息的窗口句柄.系统就是通过hWnd和uID来辨别当Shell_NotifyIcon函数调用的时候操作的是哪个托盘图标
m_Nid.uID = 0;
//应用程序定义的任务栏图标表示符。一个hWnd可以有很多的图标与之关联,这是通过指定不同的uID实现的
m_Nid.hIcon = AfxGetApp()->LoadIcon(IDI_TRAY_ICON);
//要操作(添加、删除、修改)的图标句柄
m_Nid.uFlags = NIF_ICON | NIF_TIP | NIF_MESSAGE;
//标记那些成员有效
m_Nid.uCallbackMessage = WM_COMMAND;
//当鼠标在图标区域内发生了事件,比如单击、双击时,系统会把这个消息发送到hWnd成员对应的窗口,然后该窗口可以处理该事件。这里可以不是WM_COMMAND,可以自定义消息,然后响应这个消息
TCHAR
szTitle[] = _T(
"企业培训管理系统"
);
_tcscpy(m_Nid.szTip, szTitle);
//当鼠标放在tray icon上面的时候显示的文字
3.调用Shell_NotifyIcon(NIM_ADD, &m_Nid);函数添加、删除或者修改图标
1
Shell_NotifyIcon(NIM_ADD, &m_Nid);
4.窗口销毁时记得删除icon
1
2
3
4
5
void
CTrainingSystemDlg::OnDestroy()
{
CDialog::OnDestroy();
Shell_NotifyIcon(NIM_DELETE, &m_Nid);
}
5.添加一个菜单,并且添加消息响应
1
2
3
4
5
void
CTrainingSystemDlg::OnShowMaindlg()
{
// 把窗口放在最前方
SetForegroundWindow(); ShowWindow(SW_SHOW);
}
6.在对话框中声明消息响应函数:
1
virtual
BOOL
OnCommand(
WPARAM
wParam,
LPARAM
lParam);
7.本来还应该BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加一个响应宏,但是这里我选择发送的是WM_COMMAND,所以直接重写类的OnCommand函数就行了。如果是你自定义的消息,就应该在这里添加ON_MESSAGE来响应你自定义的消息
8.响应上面NOTIFYICONDATA结构体中uCallbackMessage成员定义的消息。这里就是WM_COMMAND,当然可以是别的自定义消息。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
BOOL
CTrainingSystemDlg::OnCommand(
WPARAM
wParam,
LPARAM
lParam)
{
if
(!wParam)
//wParam为0表示消息来自一个菜单
{
switch
(lParam)
{
case
WM_RBUTTONDOWN:
{
CMenu menu, *pMenu;
menu.LoadMenu(IDR_TRAY_MENU);
pMenu = menu.GetSubMenu(0);
POINT ptPos;
GetCursorPos(&ptPos);
pMenu->SetDefaultItem(IDM_SHOW_MAINDLG);
SetForegroundWindow();
//这一行代码很重要,否则右键菜单工作//不正常。详见msdn说明:http://support.microsoft.com/kb/135788
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, ptPos.x, ptPos.y,
this
);
}
break
;
case
WM_LBUTTONDBLCLK:
SetForegroundWindow();
ShowWindow(SW_SHOW);
break
;
}
}
return
CDialog::OnCommand(wParam, lParam);
}
以上内容转载自http://www.cnblogs.com/chenkunyun/archive/2012/03/17/2403002.html
0 0
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- Java程序添加托盘图标和托盘弹出菜单
- 托盘图标及右键菜单
- 最小化程序到托盘,并且有右键菜单!
- 单击托盘图标,显示菜单
- MFC为应用程序添加托盘(右键托盘,弹出菜单)
- QT 创建托盘图标和右键菜单
- QT 创建托盘图标和右键菜单
- SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
- SWT 中实现最小化到托盘图标,并只能通过托盘的弹出菜单关闭程序
- vb6托盘右键菜单
- vc右键弹出托盘菜单 对应的消息函数内容可以减少置顶
- 弹出最小托盘图标
- Delph-- 关闭程序后托盘图标显示
- Delph-- 关闭程序后托盘图标显示
- VC 程序显示托盘图标功能
- VC++任务栏托盘图标及右键菜单实现
- 显示托盘图标
- 图解数据结构(6)——树及树的遍历
- visual c++ 6.0 的窗口操作一不小心把控件关了请问怎么打开啊?
- stmmac probe 过程
- JBPM6_0_1之用户任务(User Task)
- 使用命令行自动启动Jenkins的job
- 让一个程序托盘显示,并且右键托盘图标可以弹出菜单
- 你的登陆页是不是还很糟糕?(作品欣赏)
- cell上的button做单选,自定义的cell
- SEVERE: Error dropping the repository
- 微信公众平台开发教程(六)获取个性二维码
- 杭电 HDU 1031 Design T-Shirt
- 图解数据结构(7)——二叉查找树及平衡二叉查找树
- vs环境静态库使用出错的解决
- Linux那些事儿之我是Sysfs(3)设备模型上层容器