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 程序中的对话框的主要内容,如果未能解决你的问题,请参考以下文章