我正在尝试使用 Windows 7 引入的ITaskbarList3界面,以便可以在任务栏图标中显示冗长任务的任务进度。文档指出,在尝试初始化 ITaskbarList3 组件之前,我应该等待 TaskbarButtonCreated 消息,但我似乎没有收到任何 TaskbarButtonCreated 消息。
这是我到目前为止所拥有的:
我的 .cpp 文件中有一个全局变量来存储 TaskbarButtonCreated 的自定义消息 ID。
static const UINT m_uTaskbarBtnCreatedMsg =
RegisterWindowMessage( _T("TaskbarButtonCreated") );
我创建了一个单独的 WndProc 函数来处理新消息。
void __fastcall TForm1::WndProcExt(TMessage &Message)
{
if(Message.Msg == uTaskbarBtnCreatedMsg && uTaskbarBtnCreatedMsg != 0) {
OnTaskbarBtnCreated();
}
else {
WndProc(Message);
}
}
在我的表单构造函数中,第一行将 WindowProc 属性设置为 WndProcExt 以路由消息。我还尝试在 ChangeWindowMessageFilter 中折腾,以查看 TaskbarButtonCreated 消息是否因某种原因被过滤。
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
WindowProc = WndProcExt;
ChangeWindowMessageFilterEx(Handle, uTaskbarBtnCreatedMsg, MSGFLT_ALLOW, NULL);
...
}
在调试器中,ChangeWindowMessageFilterEx 的返回值始终为 true。我还确认我的 WndProcExt 函数接收到各种 Windows 消息,但不是我要查找的消息。OnTaskbarBtnCreated 函数永远不会被调用。
我错过了一步吗?在我的消息处理程序准备好之前,消息是否被过滤或发送?