已收到已注册的窗口消息TaskbarButtonCreated

时间:2015-02-24 13:51:22

标签: visual-c++ mfc wndproc

我想开始查看Windows 7 TaskBar API。我创建了一个基本的MFC对话框项目,但在注册TaskbarButtonCreated消息后,它永远不会被发送到我的WindowProc。这就是我所拥有的:

LRESULT CTaskBarAPITestDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    if(message == g_wmTBC)
    {
        AfxMessageBox(_T("Hit the message"));
        //This is never hit
    }
    return CDialogEx::WindowProc(message, wParam, lParam);
}

int CTaskBarAPITestDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CDialogEx::OnCreate(lpCreateStruct) == -1)
        return -1;

    g_wmTBC = RegisterWindowMessage(_T("TaskbarButtonCreated"));
    //This works fine

    return 0;
}

AfxMessageBox永远不会被击中。我还尝试向ON_REGISTERED_MESSAGE添加MESSAGE_MAP,但该方法也未被调用。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

原来我需要以下内容:

ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), g_wmTBC, MSGFLT_ALLOW, NULL);
ChangeWindowMessageFilterEx(AfxGetMainWnd()->GetSafeHwnd(), WM_COMMAND, MSGFLT_ALLOW, NULL);

在我的OnInitDialog中。

修改

这是因为我使用提升的权限运行应用程序,因此默认情况下不会从权限较低的进程接收消息,除非您使用ChangeWindowMessageFilterEx。更多信息:ChangeWindowMessageFilterEx Documentation

Microsoft也有一些示例代码执行相同的操作here on github