在一个新建单文档的project的当中,创建了一个对话框类MyDialog,对话框当中有
两个默认的按钮ok 和cancel,然后我在单文档的菜单中新建了一个菜单项为产生
“对话框”,在这个菜单项当中执行的函数体如下:
void CMainFrame::OnCreatdialog() 
{
HWND hwnd;
hwnd=CreateDialog(NULL,MAKEINTRESOURCE(IDD_DIALOG1),NULL,NULL);
::ShowWindow (hwnd,SW_SHOWMAXIMIZED);
}
运行之后,对话框可按预想产生出来,但是问题是按钮按下后都没有任何的反应
(比如IDOK()的代码为:MessageBox("thank you very much~");)
我看了一些资料,这个CreateDialog函数用在sdk中的比较多,因为在sdk中消息
的传递脉络很清晰。我搞了很长时间也没有搞明白,不知那位高手可以指点一下呀~!!

解决方案 »

  1.   

    void CMainFrame::OnCreatdialog() 
    {
    static CMyDialog dlg;
    dlg.Create(dlg.IDD, this);
    dlg.ShowWindow(SW_SHOW);
    }记得包含你的对话框类的头文件
      

  2.   

    CreateDialog的最后一个参数是消息循环的主体部分,你的按钮按下等消息,必须在该回调函数中处理,而你在那里是一个NULL   !!!  当然不会响应任何消息了……
      

  3.   

    竟然MFC框架中,何必这样自找麻烦呢!
    如果用模态方式,则创建对象,然后DoModal()就行,
    如果用非模态方式,则定义成指针对象(框架类的成员),再用Create创建就行了!
      

  4.   

    第四个参数是个回调函数啊,就像这样,老兄你不是问过这个问题吗
    BOOL CALLBACK DlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) 

        BOOL fError; 
     
        switch (message) 
        { 
            case WM_INITDIALOG: 
                CheckDlgButton(hwndDlg, ID_ABSREL, fRelative); 
                return TRUE; 
     
            case WM_COMMAND: 
                switch (LOWORD(wParam)) 
                { 
                    case IDOK: 
                        fRelative = IsDlgButtonChecked(hwndDlg, 
                            ID_ABSREL); 
                        iLine = GetDlgItemInt(hwndDlg, ID_LINE, 
                            &fError, fRelative); 
                        if (fError) 
                        { 
                            MessageBox(hwndDlg, SZINVALIDNUMBER, 
                                SZGOTOERR, MB_OK); 
                            SendDlgItemMessage(hwndDlg, ID_LINE, 
                                EM_SETSEL, 0, -1L); 
                        } 
                        else                     // Notify the owner window to carry out the task. 
     
                        return TRUE; 
     
                    case IDCANCEL: 
                        DestroyWindow(hwndDlg); 
                        hwndGoto = NULL; 
                        return TRUE; 
                } 
        } 
        return FALSE; 
    }