MFC程序中的对话框

时间:2009-09-07 04:28:35

标签: c++ visual-c++ mfc

我在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;

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

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

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

我不确定你在这里想要实现什么,并且会在这里回应其他建议,说开始使用MFC向导生成的代码并从那里开始。