我有一个Win32应用程序,它在启动时添加任务栏图标.
它工作正常,除了当资源管理器崩溃然后重新启动时,我的应用程序继续运行,但任务栏图标消失了.
我怀疑我应该处理一些事件,但是哪个?
您所指的实际上称为通知图标.让这个术语正确是很重要的,这样我们才能知道你的意思.无论如何,我认为我的猜测是准确的.
您需要侦听在创建任务栏时向所有顶级窗口广播的窗口消息.这证明,像这样:
使用Microsoft Internet Explorer 4.0及更高版本,Shell会通知应用程序已创建任务栏.创建任务栏时,它会使用TaskbarCreated字符串注册一条消息,然后将此消息广播到所有顶级窗口.当您的任务栏应用程序收到此消息时,它应该假定已添加的任何任务栏图标已被删除并再次添加它们.此功能通常仅适用于Shell启动时已运行的服务.以下示例显示了处理此案例的非常简化的方法.
Run Code Online (Sandbox Code Playgroud)LRESULT CALLBACK WndProc(HWND hWnd, UINT uMessage, WPARAM wParam, LPARAM lParam) { static UINT s_uTaskbarRestart; switch(uMessage) { case WM_CREATE: s_uTaskbarRestart = RegisterWindowMessage(TEXT("TaskbarCreated")); break; default: if(uMessage == s_uTaskbarRestart) AddTaskbarIcons(); break; } return DefWindowProc(hWnd, uMessage, wParam, lParam); }