2015-02-24 2 views
3

Я хочу начать смотреть на Windows 7 TaskBar API. Я создал базовый проект MFC Dialog, но после регистрации сообщения TaskbarButtonCreated он никогда не отправляется в мой WindowProc. Вот что у меня есть:Зарегистрированное окно Message TaskbarButtonCreated не получено

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

+1

@rrirower, насколько я понимаю, окна предназначены для публикации этого сообщения, когда он создает значок панели задач для приложения. –

ответ

3

Оказывается, мне нужно было следующее:

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

в моем OnInitDialog.

EDIT:

Это потому, что я запустить приложение с повышенными привилегиями и поэтому сообщениями по умолчанию не будет получен от более низкого привилегированного процесса, если вы не используете ChangeWindowMessageFilterEx. Дополнительная информация: ChangeWindowMessageFilterEx Documentation.

Microsoft также есть несколько примеров кода делает то же самое here on github

+0

Есть ли у вас ссылка на то, зачем это требуется, в идеале официальная документация? – IInspectable

+0

@ Необычный хороший вопрос, я отредактировал свой ответ. –