【问题标题】:dialogbox in a MFC programMFC 程序中的对话框
【发布时间】: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”的方式来表达你的问题,你可能会得到更好的答案。

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


【解决方案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 向导生成的代码开始并从那里获取它来回应此处的其他建议。

【讨论】:

    最近更新 更多