C++托盘图标异常消失问题的分析与解决

本文探讨了C++程序中托盘图标在explorer.exe重启或不明原因消失的问题。针对这两种异常情况,提供了两种解决方案:一是通过监听TaskbarCreated消息重新添加托盘图标;二是设置定时器定期检查并恢复消失的托盘图标。
摘要由CSDN通过智能技术生成

 经测试发现,对于使用托盘图标的程序,托盘图标有时会出现如下的异常:

        (1)当资源管理器explorer.exe异常重启后,程序在任务栏的托盘图标会消失;

        (2)在个别机器上出现托盘图标因不明原因消失,而此时程序依然在运行(任务管理器中能找到对应的进程)。

        针对第一种情况,在explorer.exe异常重启时,会产生一个叫做TaskbarCreated的消息,可以在响应该消息时,将托盘图标加到托盘图标区域,以规避此种情况中出现的问题。相关代码如下所示:

	UINT m_uMsgTaskbarRestart;
        ......
	m_uMsgTaskbarRestart = RegisterWindowMessage(_T("TaskbarCreated")); \\ 注册这个消息,记录消息ID
        ......
LRESULT CXXDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
	if ( message == m_uMsgTaskbarRestart )
	{
		Shell_NotifyIcon( NIM_ADD, &m_nid);
	}

	return CDialog::DefWindowProc( message, wParam, lParam );
}

        对于第二种情况,具体的原因不明,也可以找到一种办法来规避掉:开启一个守护托盘图标的定时器,定时检测托盘图标是否存在,不存在则添加,相关代码如下:(只给出定时器消息响应函数的代码段)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dvlinker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值