我有一个Win32应用程序,它在启动时添加了一个任务栏图标。
它工作得很好,除了当资源管理器崩溃然后重新启动时,我的应用程序继续运行,但任务栏图标不见了。
我怀疑我应该处理一些事件,但是哪一个?
你所指的实际上是通知图标。弄清楚这个术语很重要,这样我们才能明白你的意思。无论如何,我认为我的猜测是准确的。
创建任务栏时,需要侦听广播到所有顶层窗口的窗口消息。如下所示:
对于Microsoft Internet Explorer 4.0及更高版本,Shell会通知应用程序任务栏已经创建。创建任务栏时,它使用TaskbarCreated字符串注册一条消息,然后将此消息广播到所有顶级窗口。当您的任务栏应用程序收到此消息时,它应该假定它添加的任何任务栏图标已被删除并重新添加它们。这个特性通常只适用于Shell启动时已经在运行的服务。下面的示例显示了处理这种情况的一个非常简化的方法。
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); }