DefWindowProc () проблема - PullRequest
       1

DefWindowProc () проблема

2 голосов
/ 21 ноября 2011

VS2008, c ++, mfc Я должен обрабатывать сообщения из дочерних окон в родительском окне.На самом деле я хочу обрабатывать только сообщения ON_BN_CLICKED, а затем совершать некоторые другие действия.Как я понял, я должен переопределить WindowProc ():

LRESULT CDLauncherDlg::WindowProc(UINT mes, WPARAM wp, LPARAM lp)
{
    HWND hWnd = this->m_hWnd;
    switch (mes){
        case WM_COMMAND:
            if((LOWORD(wp)==IDC_BUTTON4)&& (HIWORD(wp) == BN_CLICKED))
            {
                MessageBox("Button pressed.", "", 0);
            }
        break;
    }
    return DefWindowProc(mes, wp, lp);
}

К сожалению, после нажатия кнопки Отмена DefWindowProc () ничего не делает, и я не могу закрыть приложение.В чем проблема?

Ответы [ 2 ]

1 голос
/ 06 апреля 2016

Окончательный ответ должен был заменить

return DefWindowProc(mes, wp, lp);

с

return CDialog::WindowProc(mes, wp, lp); 
0 голосов
/ 21 ноября 2011

Ваш фрагмент кода не указывает на то, что вы обрабатываете сообщение WM_CLOSE или что вы явно вызываете DestroyWindow () при нажатии на IDC_BUTTON4.Если это дочернее окно, и вы хотите завершить приложение, вы можете вызвать DestroyWindow (), а затем где-нибудь позже PostQuitMessage ().

Если ваш фрагмент здесь является windowproc для вашего родительского окна и обработкиIDC_BUTTON4 - это родительское окно, получающее исходное сообщение, которое вы обработали в дочернем элементе и передали родительскому элементу, просто вызовите PostQuitMessage (), где вы поместили вызов MessageBox ().

...