Как я могу создать дочерний диалог из существующего диалога (windows api)? - PullRequest
0 голосов
/ 06 июля 2011

Как я могу создать дочерний диалог из существующего диалога?

Декларация (глобальная область)

HINSTANCE hInst;
HWND hWnd;

WinMain:

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                      LPSTR lpCmdLine, int nCmdShow )
{
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),hWnd, (DLGPROC)DlgProc);
    //MessageBox (NULL, TEXT ("Hello, Windows 98!"), TEXT ("HelloMsg"), 0);
    return 0;
}

DlgProc:

LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
    switch(Msg)
    {
    case WM_COMMAND:
            switch(LOWORD(wParam))
            {
            case IDM_ABOUT:
                //DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),hWnd, (DLGPROC)AboutDlgProc);
                                    DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUT),hWndDlg, (DLGPROC)AboutDlgProc); //changed to this...
                return 0;
            }
            break;
    }
}

AboutDlgProc:

BOOL CALLBACK AboutDlgProc (HWND hDlg, UINT message,
    WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_CREATE:
        hInst = ((LPCREATESTRUCT) lParam)->hInstance ;
        return 0;
    case WM_INITDIALOG :
        ShowWindow (hDlg, SW_HIDE);
        return TRUE ;

    case WM_COMMAND :
        switch (LOWORD (wParam))
        {
        case IDOK :
        case IDCANCEL :
            EndDialog (hDlg, 0) ;
            return TRUE ;
        }
        break ;
    }
    return FALSE ;
}

Когда я щелкаю пункт меню под названием О (IDM_ABOUT), но ничего не происходит. Так как же создать диалоговое окно about?

EDIT

Теперь можно открыть диалоговое окно about. причина, по которой диалоговое окно about не может появиться раньше, заключается в том, что я перетаскиваю MFC Link элемент управления диалогового окна. Поскольку мое приложение win32 sdk не поддерживает MFC, оно просто не удалось. LOL.

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Если вы не инициализируете hInst, который вы используете при вызове DialogBox, вызов не будет выполнен, потому что он не может найти ресурс диалога.Вы действительно должны проверять возвращаемые значения системных вызовов при отслеживании ошибок, подобных этой.

0 голосов
/ 06 июля 2011

Ваш код не объявляет и не инициализирует hwnd, но передает его как родительский элемент как диалоговому окну, так и блоку about. В последнем случае вы, вероятно, захотите передать hWndDlg, чтобы поле about было модальным для основного диалога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...