2015-02-24 51 views
3

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

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中,但该方法也未被调用。有什么建议么?

+0

我不知道你在哪里发布的“TaskbarButtonCreated”的消息。你已经注册了它,但是,从来没有发布它,以便它可以被处理。 – rrirower 2015-02-24 13:59:30

+1

@rrirower据我了解,Windows应用程序创建任务栏图标时发布此消息。 – 2015-02-24 19:40:52

回答

3

原来我需要以下:

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

编辑:

这是因为我正在运行使用提升的权限的应用程序,因此默认的邮件不会从较低特权的过程,除非你使用ChangeWindowMessageFilterEx接收。更多信息:ChangeWindowMessageFilterEx Documentation

微软也有一些示例代码做同样的事情here on github

+0

你碰巧有一个为什么这是必需的参考,理想的官方文档? – IInspectable 2016-09-02 19:56:16

+0

@IInspectable好问题,我编辑了我的答案。 – 2017-06-25 18:28:19