Как закрыть диалоговое окно (дочернее), не закрывая главное диалоговое окно (родительское) - PullRequest
1 голос
/ 25 февраля 2012

У меня есть один родительский диалог, в этом диалоговом окне есть меню, в этом меню (Справка-> о).
когда я нажимаю на выбор о, показать о DialogBox.
Я хочу, чтобы при нажатии кнопки «ОК» или «Закрыть» (X) закрыть это диалоговое окно, но не главное диалоговое окно.

Это мои попытки:

// ------------- Main dialog function
BOOL CALLBACK DlgFunc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp){
    switch(msg){
    case WM_COMMAND:
        switch(LOWORD(wp)){
        case IDM_HABOUT: // Here, I set when I click on help selection in the menu creates (about dialogbox)
            DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_AboutDlg), hwnd, AboutDlgFunc);
            break;
        }
        break;
    case WM_CLOSE:
        DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return false;
    }
    return true;
}


// ------------- About dialog function
BOOL CALLBACK AboutDlgFunc(HWND HabutWnd, UINT msg, WPARAM wp, LPARAM lp){
    switch(msg){
    case WM_COMMAND:
        if(LOWORD(wp) == IDOK)
            EndDialog(HabutWnd,0);
        break;
    case WM_CLOSE:
        EndDialog(HabutWnd,0);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return false;
    }
    return true;
}

1 Ответ

3 голосов
/ 25 февраля 2012

Не звоните PostQuitMessage в WM_DESTROY внутри AboutDlgFunc. По сути, это приводит к закрытию всей программы.

...