如何从现有对话框(windows api)创建子对话框?

时间:2011-07-06 14:35:57

标签: c windows winapi dialog

如何从现有对话框创建子对话框?

宣言(全球范围)

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)的菜单项时,却什么也没发生。 那么如何创建一个关于对话框?

修改

现在可以开出约会对话框了。之前关于对话框无法解决的原因是我拖动 MFC链接控制对话框。由于我的win32 sdk应用程序不支持MFC,所以它只是失败了。哈哈。

2 个答案:

答案 0 :(得分:2)

如果您未在hInst的调用中初始化您正在使用的DialogBox,则呼叫将失败,因为它无法找到对话框资源。在追踪这样的错误时,你真的应该检查系统调用的返回值。

答案 1 :(得分:0)

您的代码未声明或初始化hwnd,但它将其作为父对象传递给对话框和about框。在后一种情况下,您可能希望传递hWndDlg,以便about框对于主对话框是模态的。