MFC 程序中的对话框

Posted

技术标签:

【中文标题】MFC 程序中的对话框【英文标题】:dialogbox in a MFC program 【发布时间】:2009-09-07 04:28:35 【问题描述】:

我使用 Visual C++ 中的 MFC 编写了以下应用程序,其中包括两个资源(一个菜单和一个对话框)(使用资源编辑器创建)...该程序工作得非常好,只是它只显示一个资源,即。它只显示菜单,但不显示对话框... 该怎么办?? 这是代码...

#include<afxwin.h>
#include"stdafx.h"
#include"resource.h"

class mydialog:public CDialog

private:
    int id;

public:
    mydialog(int n):CDialog(n)
    
        id=n;
    

    int OnInitDialog()
    
        CDialog::OnInitDialog();
        if(id==IDD_DIALOG1)
            CenterWindow(GetDesktopWindow());
        else
            CenterWindow();
        return TRUE;
    

    void OnOK()
    
        CDialog::OnOK() ;
        MessageBox(TEXT("You have Pressed the OK Button"),TEXT("OnOK handler"));
    
;
class myframe:public CFrameWnd

public:
    myframe()
    
        Create(0,TEXT("Simple Dialog Box"),WS_OVERLAPPEDWINDOW,rectDefault,0,MAKEINTRESOURCE(IDR_MENU1));
    
    void about()
    
        mydialog d(IDD_DIALOG1);
        d.DoModal();
    
    DECLARE_MESSAGE_MAP()
;

BEGIN_MESSAGE_MAP(myframe,CFrameWnd)
ON_COMMAND(101,about)
END_MESSAGE_MAP()

class myapp:public CWinApp

public:
    int InitInstance()
    
        myframe *p;
        p=new myframe;
        p->ShowWindow(3);
        m_pMainWnd=p;
        return 1;
    
;
myapp a;

【问题讨论】:

您似乎正在尝试学习 MFC?我的一般建议是从 Visual C++ 中的向导开始。它将为您生成许多空项目,您可以与这些项目一起玩,看看它们是如何工作的。我不清楚这段代码试图完成什么,或者你期望发生什么。如果你用“我想做 X,但这段代码做 Y”的方式来表达你的问题,你可能会得到更好的答案。 【参考方案1】:

嘿,不编译代码并运行它我可以在这里看到一个问题:

myframe()

    Create(0,TEXT("Simple Dialog Box"),WS_OVERLAPPEDWINDOW,rectDefault,0,MAKEINTRESOURCE(IDR_MENU1));

您正在使用IDR_MENU1 资源创建一个窗口,该资源是一个菜单。这意味着您的应用程序的主窗口是菜单。

此外,整个代码看起来一点也不像 MFC。我建议从 Visual Studio 模板创建一个 MFC 应用程序 - 它会为您正确设置主窗口。

【讨论】:

不,这里的 IDR_MENU1 参数是告诉窗口使用该资源作为窗口的菜单,所以这不是问题。【参考方案2】:

只有在执行 id 为 101 的命令时才会显示该对话框。大概这将是与主窗口相关联的菜单项。如果您的菜单定义为:

IDR_MENU1 MENU 
BEGIN
    POPUP "HELP"
    BEGIN
        MENUITEM "About",  ID_HELP_ABOUT
    END
END

ID_HELP_ABOUT 定义为值101,那么当您选择该菜单项并显示对话框时,您的about 函数将被调用。

我不确定您在此处尝试实现的确切目标,并且会通过说从 MFC 向导生成的代码开始并从那里获取它来回应此处的其他建议。

【讨论】:

以上是关于MFC 程序中的对话框的主要内容,如果未能解决你的问题,请参考以下文章

MFC 对话框应用程序中的错误

一个 MFC 应用程序中的两个对话框

OpenGL 抑制基于 MFC 对话框的应用程序中的异常

基于 mfc 对话框的应用程序中的功能区控件

如何在单独的 mfc 控制台应用程序中使用 mfc 应用程序的对话框?

MFC模态与非模态对话框