MFC 任务托盘经常消失问题

经常发现自己写的程序任务托盘会无缘无故的消失,但是进程还是存在的,原来是资源管理器异常的时候,重新生成的时候,程序需要重新添加下任务托盘。

当explorer进程重启,taskbar将会被创建,taskbar创建后会使用字符串“TaskbarCreated”注册一个消息,然后将这个消息广播到它的所有top-level windows。因此我们可以去注册并捕获这个消息,然后在消息处理函数中调用Shell_NotifyIcon(NIM_ADD, &m_nid); 重新将托盘图标添加上。

定义WM_TaskbarRestart

1 const UINT WM_TaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated"));

1 ON_REGISTERED_MESSAGE(WM_TaskbarRestart, &CXXXDlg::OnTaskBarRestart)
2
3 LRESULT CXXXDlg::OnTaskBarRestart(WPARAM wParam, LPARAM lParam)
4 {
5     Shell_NotifyIcon(NIM_ADD, &m_nId);
6
7     return 0;
8 }

声明;

afx_msg LRESULT OnTaskBarRestart(WPARAM wParam, LPARAM lParam);

原文地址:https://www.cnblogs.com/ahcc08/p/10987893.html

时间: 2024-11-14 13:17:46

MFC 任务托盘经常消失问题的相关文章

MFC 任务托盘显示气泡

void CTestDlg::OnClose() { ShowWindow(SW_HIDE); if (!m_bHideNoticeInfo) { ShowBalloonTip(_T("程序已最小化到托盘"), _T(""), 3000, 1); m_bHideNoticeInfo = true; } } BOOL CTestDlg::ShowBalloonTip(LPCTSTR szMsg, LPCTSTR szTitle, UINT uTimeout, DWOR

任务栏托盘不消失的问题-有启发

通过找出该图标所对应的进程ID,如果该ID为NULL则删除该图标. #include <AFX.H> #include <COMMCTRL.H> #include <iostream.h> int main() { HWND hStatus=::FindWindow("Shell_TrayWnd",NULL); //得到任务栏句柄 if (hStatus==NULL) { cout<<"Get Shell_TrayWnd err

Qt之自定义托盘

说起Qt,真是个不错的ui库,不仅仅ui做的好,其他方便也不差,在扩平台方便也是非常的强大.这篇文章我将会分析下qt的托盘,QSystemTrayIcon是qt的托盘类,托盘类的用途是什么我就不说了,自行百科就好,关键问题是我们要实现怎么的托盘. 说起常用的客户端软件,qq,微信等聊天工具,有这么几个托盘事件: 1.来消息图标闪烁 2.气泡消息提示 3.鼠标左键单击.左键双击.右键单击.滚动单击 上述这三种事件QSystemTrayIcon类都完全能够解决,但是托盘的hover事件却无能为力,如

mfc 对话框程序 托盘实现

1 在头文件里面定义 消息 #define WM_SHOWTASK WM_USER+10 在主窗口类里面定义 一个变量 两个函数 a 变量 托盘结构体的变量 NOTIFYICONDATA m_nid; b 初始化上述变量的函数 void ToTray(void); c 托盘的消息处理函数 LRESULT onShowTask(WPARAM wParam,LPARAM lParam); 2 在cpp里面 添加一下内容 a 在BEGIN_MESSAGE_MAP 和 END_MESSAGE_MAP 之

MFC实现NotifyIcon托盘应用程序

/*参考别人的做了细微修改*/ 类似于QQ的托盘程序编写 1.首先我们新建一个MFC程序,在对话框Dlg类中添加一个NOTIFYICONDATA类型对象 NOTIFYICONDATA m_nid; 2.在stdafx.h头文件中定义一个自定义消息 #define WM_SYSTEMTRAY WM_USER+1001 3.在Dlg类中中定义一个线程函数 static DWORD WINAPI NotifyIconProc(LPVOID lpParameter);//呵呵,有人会问了这里的线程函数为

MFC添加图标到托盘

MFC窗口实现最小化到托盘 右键菜单和还原 //.h文件 void toTray();//最小化到托盘 void DeleteTray();//删除托盘图标 afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAM lParam) ;//图标恢复 //.cpp文件 define WM_SHOWTASK (WM_USER +1) define IDR_SHOW 11 define IDR_OTHER 12 define IDR_EXIT 13 BEGIN_ME

MFC下托盘图标的实现和托盘菜单

对话框头文件XXXDlg.h: 1.添加成员变量NOTIFYICONDATA m_nid; 2.添加tray消息响应函数的声明 afx_msg LRESULT OnTrayNotify(WPARAM wParam, LPARAM lParam); 对话框实现文件XXXDlg.cpp: 1.定义tray消息 #define UM_TRAYNOTIFY WM_USER + 11 2.CXXXDlg的构造函数添加 memset(&m_nid, 0, sizeof(m_nid)); // Initial

VS2010/MFC中修改菜单栏后状态栏消失问题

今天用VS2010编写单文档的窗口程序,修改菜单之后忽然发现状态栏不见了,百度了好久也没有找到原因,无奈只能重新又做了一遍,结果功夫不负有心人,原因一不小心被我找到了. 原来MFC中有一个命令是ID_VIEW_STATUS_BAR对应的函数可以隐藏状态栏的显示. 我的解决方法比较笨,就是在菜单栏中添加了一个状态栏显示的选项,把ID设为ID_VIEW_STATUS_BAR,当点击它的时候就选择显示或者隐藏状态栏了.

MFC程序最小化到托盘

1.在资源中的Icon中导入一个自己喜欢的图标,ID命名为IDR_MAINFRAME,将先前的IDR_MAINFRAME的图标删除掉: 2.在自己的Dialog头文件中定义一个变量  NOTIFYICONDATA m_nid,关于该结构体的具体信息可以查阅MSDN: 3.添加消息响应函数OnInitDialog(),并在该函数中添加以下代码,这样程序一启动,就在托盘中显示出了自己应用程序的图标. 1 //---------------------------托盘显示---------------