任务栏托盘图标及右键菜单实现.pdf
文本预览下载声明
VC++任务栏托盘图标及右键菜单实现
作者:xingzhe826 日期:2013 年11 月14 日
1. 创建单文档工程TaskQMenu
2. 设置图标右键菜单,ID 为IDR_TPMENU
3. 初始化托盘图标
// 初始化托盘图标
NOTIFYICONDATA nifd; // NOTIFYICONDATA 结构声明
nifd.cbSize = sizeof(NOTIFYICONDATA); // NOTIFYICONDATA 结构体大小
nifd.hWnd = m_hWnd; // 标识窗口:接收与托盘图标相关的消息
nifd.uID = IDR_MAINFRAME; // 指定任务栏图标
nifd.uFlags = NIF_MESSAGE // 指定该结构体变量的那些成员变量有效
| NIF_ICON
| NIF_TIP;
nifd.uCallbackMessage = WM_UIMSG; // 自定义消息标识:当托盘图标发生鼠标事
// 件或使用键盘选择或激活图标时,系统将
// 次标识向hWnd 窗口发送消息
nifd.hIcon = theApp.LoadIcon(IDR_MAINFRAME);// 图标句柄
lstrcpy(nifd.szTip, _T(提示文本)); // 托盘图标提示文本
Shell_NotifyIcon(NIM_ADD, tnd); // 安装托盘图标
4. 消息处理
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
ON_MESSAGE(WM_UIICON, OnNotifyIcon) // WM_UIICON 消息映射
END_MESSAGE_MAP()
afx_msg LRESULT OnNotifyIcon(WPARAM wParam, LPARAM lParam);// 消息处理
LRESULT CMainFrame::OnNotifyIcon(WPARAM wParam, LPARAM lParam)
{
UINT uID; // 发出该消息的消息的图标ID
UINT uMouseMsg; // 鼠标消息
uID = (UINT)wParam; // 参数解析并赋值
uMouseMsg = (UINT)lParam;
if(WM_LBUTTONDOWN == uMouseMsg)
{// 单击左键
if (IDR_MAINFRAME == uID)
{
if (IsIconic()) // 是否最小化(图标化)窗口
{
ShowWindow(SW_NORMAL);
}
}
}
else if (WM_RBUTTONDOWN == uMouseMsg)
{// 单击右键
if (IDR_MAINFRAME == uID)
{
CMenu menu;
menu.LoadMenu(IDR_TPMENU); // 加入图标右键快捷菜单
SetForegroundWindow();
显示全部