vc托盘图标的实现以及托盘右键菜单的响应

本文详细介绍了如何在网吧魔方兑换中心应用中实现托盘图标响应、修改和删除功能,以及托盘图标右键菜单的响应与操作,包括双击显示主窗口、右键菜单项的响应等。

#define  UM_SHOW_TORY_ICON WM_USER + 200 + 1      // 用于响应托盘图标消息


void addToTray()

{
HINSTANCE hInst = m_pm.GetInstance();
HICON hIcon;
hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON));


NOTIFYICONDATAW nd;
nd.cbSize = sizeof (NOTIFYICONDATA);
nd.hWnd = m_hWnd;


nd.uID = IDI_ICON;   //托盘图标的图标ID
nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;     
nd.uCallbackMessage = UM_SHOW_TORY_ICON;   //托盘图标响应的消息ID
nd.hIcon = hIcon;
wcscpy(nd.szTip,L"网吧魔方兑换中心"); //托盘图标鼠标悬浮提示文字

Shell_NotifyIcon(NIM_ADD, &nd);   
}


void ModifyToryIcon()
{
HINSTANCE hInst = m_pm.GetInstance();
HICON hIcon;
hIcon = LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON));


NOTIFYICONDATAW nd;
nd.cbSize = sizeof (NOTIFYICONDATA);
nd.hWnd = m_hWnd;


nd.uID = IDI_ICON;
nd.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP;
nd.uCallbackMessage = UM_SHOW_TORY_ICON;
nd.hIcon = hIcon;
wcscpy(nd.szTip, L"网吧魔方兑换中心");


// 全局函数Shell_NotifyIcon()用于在托盘上增加、删除或修改图标
//  NIM_ADD 增加图标
// NIM_DELETE 删除图标
//  NIM_MODIFY 修改图标
Shell_NotifyIcon(NIM_MODIFY, &nd); 


}


void DelTray(HWND m_hWnd)
{
NOTIFYICONDATA nd;
nd.cbSize = sizeof (NOTIFYICONDATA);
nd.hWnd = m_hWnd;
nd.uID = IDI_ICON;
Shell_NotifyIcon(NIM_DELETE, &nd);
}


void showPopMenu()
{
CMenu menu;  
BOOL issuc = menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));     //  IDR_MENU1使用的是系统菜单
if (issuc == FALSE)
{
return;
}
//载入事先定义的菜单 
if ( m_is_start_run == FALSE)   //此处用于更换菜单项勾选状态
{
menu.GetSubMenu(0).CheckMenuItem(ID_AUTOOPEN, MF_BYCOMMAND | MF_UNCHECKED);
}
else
{
menu.GetSubMenu(0).CheckMenuItem(ID_AUTOOPEN, MF_BYCOMMAND | MF_CHECKED);
}

POINT pos;  
GetCursorPos(&pos);  
SetForegroundWindow(m_hWnd);  //失去焦点时菜单自动消失
menu.GetSubMenu(0).TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pos.x, pos.y, m_hWnd);   //根据鼠标当前焦点位置设置弹出菜单位置

}

//托盘图标消息响应以及图标右键菜单项的响应

virtual HRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
{
BOOL isHandle = FALSE;
switch(uMsg){  
case WM_COMMAND:
{
if (wParam == ID_SHOWCONSALE)
{
ShowWindow(true);
}
if ( wParam == ID_AUTOOPEN )
{
if (m_is_start_run == FALSE)
{
//设置开机启动

}
else
{
//取消开机启动
}


}
if ( wParam == ID_QUIT )
{
DelTray(m_hWnd);
PostQuitMessage(0);
}
}
case UM_SHOW_TORY_ICON:
{
if(lParam == WM_LBUTTONDBLCLK)  
{  
//鼠标双击时主窗口出现  
::ShowWindow(m_hWnd, SW_SHOWNORMAL);
}  
else if(lParam==WM_RBUTTONUP && wParam == IDI_ICON)
{     
//鼠标右键单击弹出菜单  
showPopMenu();
}
break;  
}
}
//业务消息
if (!isHandle)
return ui_dlg_helper::HandleMessage(uMsg, wParam, lParam);
return S_OK;


};
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值