MFC程序任务栏托盘图标的实现
2013-04-21 13:49
375 查看
1.首先自定义函数
//添加任务栏托盘图标,Tray托盘
BOOL CChatRoomDlg::TrayMyIcon(BOOL bAdd)//bAdd为TRUE就添加,bAdd为FALSE就不添加。
{
BOOL bRet = FALSE;
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = GetSafeHwnd();//就是m_hWnd
tnd.uID = IDR_MAINFRAME;
if(bAdd == TRUE)
{
tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;//uFlags这个参数为了标识下面的哪个参数可用
tnd.uCallbackMessage = WM_TRAYICON_MSG;//NIF_MESSAGE,任务栏托盘图标在被鼠标点击时触发的消息
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//NIF_ICON
//_tcscpy_s(tnd.szTip,sizeof(tnd.szTip),_T("聊天室v1.0"));//NIF_TIP
memcpy(tnd.szTip,_T("聊天室v1.0"),sizeof(tnd.szTip));
ShowWindow(SW_MINIMIZE);//把窗口最小化。
ShowWindow(SW_HIDE);//只是把程序窗口隐藏了。(界面的可视化设计其实就是一层窗户纸,捅破了就好了)
bRet = Shell_NotifyIcon(NIM_ADD,&tnd);//添加任务栏托盘图标
}
else
{
ShowWindow(SW_SHOWNA);//显示窗口
SetForegroundWindow();//把程序窗口设置成前景图标
bRet = Shell_NotifyIcon(NIM_DELETE,&tnd);//删除任务栏托盘图标
}
return bRet;
}
2.下面的函数是自定义的动态菜单的命令响应函数,在命令响应函数中调用TrayMyIcon();函数就可以实现点击该菜单时,程序界面消失,在任务栏托盘中显示一个图标。
//添加任务栏托盘图标
void CChatRoomDlg::OnMenuitemtray()
{
TrayMyIcon();
}
3.添加鼠标移动到任务栏托盘图标上时的自定义消息
#define WM_TRAYICON_MSG (WM_USER+100)//任务栏图标显示的消息(nd.uCallbackMessage = WM_TRAYICON_MSG;)
在消息映射中添加消息和消息响应函数的映射
ON_MESSAGE(WM_TRAYICON_MSG, OnTrayCallBackMsg)
下面是定义的是响应该消息的回调函数
//任务栏托盘图标的响应函数,鼠标只要放到任务栏托盘图标,就会触发WM_TRAYICON_MSG,消息调用这个函数
LRESULT CChatRoomDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam)
{
switch(lparam)
{
case WM_RBUTTONUP://鼠标右键单击的消息
{
CMenu mMenu,*pMenu = NULL;
CPoint pt;
mMenu.LoadMenu(IDR_MENU2);
pMenu = mMenu.GetSubMenu(0);
GetCursorPos(&pt);
SetForegroundWindow();//不加这一段代码可能出现右键菜单不消失的现象
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this);
break;
}
case WM_LBUTTONDBLCLK://鼠标左键双击的消息
{
ShowWindow(SW_RESTORE);
}
SetForegroundWindow();
TrayMyIcon(FALSE);
break;
default:
break;
}
return NULL;
}
至此就可以实现程序任务栏托盘图标的显示了,可以在switch中增加其他的消息响应。
//添加任务栏托盘图标,Tray托盘
BOOL CChatRoomDlg::TrayMyIcon(BOOL bAdd)//bAdd为TRUE就添加,bAdd为FALSE就不添加。
{
BOOL bRet = FALSE;
NOTIFYICONDATA tnd;
tnd.cbSize = sizeof(NOTIFYICONDATA);
tnd.hWnd = GetSafeHwnd();//就是m_hWnd
tnd.uID = IDR_MAINFRAME;
if(bAdd == TRUE)
{
tnd.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;//uFlags这个参数为了标识下面的哪个参数可用
tnd.uCallbackMessage = WM_TRAYICON_MSG;//NIF_MESSAGE,任务栏托盘图标在被鼠标点击时触发的消息
tnd.hIcon = LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME));//NIF_ICON
//_tcscpy_s(tnd.szTip,sizeof(tnd.szTip),_T("聊天室v1.0"));//NIF_TIP
memcpy(tnd.szTip,_T("聊天室v1.0"),sizeof(tnd.szTip));
ShowWindow(SW_MINIMIZE);//把窗口最小化。
ShowWindow(SW_HIDE);//只是把程序窗口隐藏了。(界面的可视化设计其实就是一层窗户纸,捅破了就好了)
bRet = Shell_NotifyIcon(NIM_ADD,&tnd);//添加任务栏托盘图标
}
else
{
ShowWindow(SW_SHOWNA);//显示窗口
SetForegroundWindow();//把程序窗口设置成前景图标
bRet = Shell_NotifyIcon(NIM_DELETE,&tnd);//删除任务栏托盘图标
}
return bRet;
}
2.下面的函数是自定义的动态菜单的命令响应函数,在命令响应函数中调用TrayMyIcon();函数就可以实现点击该菜单时,程序界面消失,在任务栏托盘中显示一个图标。
//添加任务栏托盘图标
void CChatRoomDlg::OnMenuitemtray()
{
TrayMyIcon();
}
3.添加鼠标移动到任务栏托盘图标上时的自定义消息
#define WM_TRAYICON_MSG (WM_USER+100)//任务栏图标显示的消息(nd.uCallbackMessage = WM_TRAYICON_MSG;)
在消息映射中添加消息和消息响应函数的映射
ON_MESSAGE(WM_TRAYICON_MSG, OnTrayCallBackMsg)
下面是定义的是响应该消息的回调函数
//任务栏托盘图标的响应函数,鼠标只要放到任务栏托盘图标,就会触发WM_TRAYICON_MSG,消息调用这个函数
LRESULT CChatRoomDlg::OnTrayCallBackMsg(WPARAM wparam, LPARAM lparam)
{
switch(lparam)
{
case WM_RBUTTONUP://鼠标右键单击的消息
{
CMenu mMenu,*pMenu = NULL;
CPoint pt;
mMenu.LoadMenu(IDR_MENU2);
pMenu = mMenu.GetSubMenu(0);
GetCursorPos(&pt);
SetForegroundWindow();//不加这一段代码可能出现右键菜单不消失的现象
pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON,pt.x,pt.y,this);
break;
}
case WM_LBUTTONDBLCLK://鼠标左键双击的消息
{
ShowWindow(SW_RESTORE);
}
SetForegroundWindow();
TrayMyIcon(FALSE);
break;
default:
break;
}
return NULL;
}
至此就可以实现程序任务栏托盘图标的显示了,可以在switch中增加其他的消息响应。
相关文章推荐
- QT 实现一个任务栏托盘图标程序 weathertrayicon
- 基于对话框的MFC程序中,实现非模态子窗口在任务栏显示图标以及窗口左上角加图标
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- C#之使用NotifyIcon实现任务栏托盘菜单,图标闪烁效果及气泡提示 很多程序是只需要后台运行的,甚至不需要自己的应用界面。NotifyIcon提供了程序在任务栏的显示功能 程序下载链接如下
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- 浅谈c#实现隐藏任务栏图标的Windows托盘程序
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- MFC中提示对话框的滑动弹出和程序图标加入系统托盘的实现
- MFC 为程序制作一个系统托盘图标、显示隐藏任务栏图标
- //刷新任务栏图标 终止别的进程序有些程序有托盘会残留
- C# 实现任务栏图标程序
- C#:实现托盘(任务栏图标与托盘图标互斥)
- MFC下托盘图标的实现和托盘菜单
- MFC将程序添加到系统图标栏,系统托盘栏
- C#实现系统托盘,C#窗体最小化时隐藏为任务栏图标
- C# 实现任务栏图标程序
- Qt实现任务栏中的托盘图标的功能.
- C#实现WinForm程序的动态系统托盘图标
- C# 实现任务栏图标程序
- MFC对话框程序启动的时候直接隐藏、在任务栏不显示图标