托盘图标消失问题

explorer.exe 重启后托盘图标会消失。需要程序重新加入到托盘。

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


//头文件声明
afx_msg LRESULT OnTaskBarCreated(WPARAM wParam, LPARAM lParam);

//cpp文件实现
const UINT WM_TaskbarCreated = RegisterWindowMessage(TEXT("TaskbarCreated"));

BEGIN_MESSAGE_MAP(CMainFrame, CWnd)

	ON_REGISTERED_MESSAGE(WM_TaskbarCreated, OnTaskBarCreated)

END_MESSAGE_MAP()



LRESULT CMainFrame::OnTaskBarCreated(WPARAM wParam, LPARAM lParam)
{
	// 把自己加到托盘
	NOTIFYICONDATA tnd;
	tnd.cbSize = NOTIFYICONDATA_V1_SIZE;
	tnd.hWnd = m_hWnd;
	tnd.uID = IDR_MAINFRAME;
	tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
	tnd.uCallbackMessage = WM_TRAYMESSAGE;
	tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDR_MAINFRAME));
	_tcscpy_s(tnd.szTip, _T("程序名称"));
	Shell_NotifyIcon(NIM_ADD, &tnd);
	return 0;
}

你可能感兴趣的:(MFC)