如何制作CDialog?
Posted
技术标签:
【中文标题】如何制作CDialog?【英文标题】:How to make a CDialog? 【发布时间】:2017-09-12 09:24:48 【问题描述】:我尝试了多种方法,但基础是这样的:
#include <stdio.h>
#include <afxwin.h>
main( int argc, const char* argv[] )
printf( "\nHello World\n\n" );
CDialog *dlg = new CDialog();
dlg->DoModal();
while (true)
Sleep(1); // Sleep is a windows function
当我运行它时,我收到以下错误:
我在这个对话框中缺少什么?
我查找了几个资源,但所有资源都导致相同的错误消息。
谁能告诉我我没看到什么?
【问题讨论】:
你想显示一个对话框,好吧。但是你希望它包含什么?只是一些文字(改用MessageBox
)?还是某种形式(改为创建一个基于对话框的项目)?还有什么?
最后我想从对话框中获取一些信息。但首先我想显示一个空对话框:D
要开始使用,只需使用 Visual Studio 应用程序向导创建一个“基于对话框”的应用程序。这将生成创建“空”对话框所需的代码。稍后您可以尝试从头开始做所有事情,但对于初学者,建议使用向导。
【参考方案1】:
在控制台应用程序中使用 MFC 需要一些初始化。 没有这个你会得到断言。
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
// initialize MFC and print and error on failure
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
// TODO: change error code to suit your needs
_tprintf(_T("Fatal Error: MFC initialization failed\n"));
return 8;
您还必须使用绑定到 CDialog 的资源。您可以使用适当的构造函数。或者您使用类向导从 CDialog 派生您自己的对话框。
但是创建 MFC 控制台应用程序并使用对话框对我来说没有意义...您的问题可能需要更多详细信息,您想要做什么以及为什么要这样做。
在继续这种编程方式之前,您可能需要阅读一些书籍或文章。
【讨论】:
你不需要派生自CDialog
。如果是这种情况,所有显式构造函数都将受到保护(它们是 not)。但是,您可以做的事情相当有限(因为实际上,除了允许来自CDialog
的默认处理之外,您没有做任何事情。这个答案最重要的部分是(a)正确设置 MFC, (b) 确保对话框绑定到资源(而不是使用未绑定的构造函数)。既不当前在 OPs 代码中,both 都应该是.
感谢您的建议。改变了我的答案。以上是关于如何制作CDialog?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 CDialog::SetDefId 与非按钮控件一起使用?
如何使用修改后的 DLGTEMPLATEEX 调用 CDialog::DoModal()