c4pQ
c4pQ

Reputation: 968

DefWindowProc() issue

VS2008, c++, mfc I have to handle messages from the child windows in the parent window. In fact i want to handle only ON_BN_CLICKED messages and then make some ather actions. As i understood i have to redefine 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);
}

Unfortunatelly, after pressing Cancel button DefWindowProc() does nothing and i can't close the application. What's the problem?

Upvotes: 2

Views: 1912

Answers (2)

c4pQ
c4pQ

Reputation: 968

The final answer was to replace

return DefWindowProc(mes, wp, lp);

with

return CDialog::WindowProc(mes, wp, lp); 

Upvotes: 1

Christopher
Christopher

Reputation: 774

Your code snippet doesn't indicate you're handling a WM_CLOSE message, or that you're explicitly calling DestroyWindow() when IDC_BUTTON4 is clicked. If this is a child window, and you want to terminate the application, you could call DestroyWindow() and then somewhere later PostQuitMessage().

If your snippet here is the windowproc for your parent window, and the handling of IDC_BUTTON4 is the parent window receiving the original message that you handled in the child and passed to the parent, simply call PostQuitMessage() where you've put the call to MessageBox().

Upvotes: 0

Related Questions