Jiu*_*Jiu 2 c++ mfc visual-c++
我开始学习 VC++/MFC。然后我创建了一个“HelloWord”程序,我App.h/.cpp AppDlg.h/.cpp通过创建一个基本的文件得到了两个基本文件Dialog项目。
第一个问题:我找不到程序入口。main.cpp项目中没有。
然后我试图找到之间的关系App,并AppDlg会见了第二个问题:基础上的文件名,貌似AppDlg应该是一个定制的MFCDialog组件,并App设是主要事件线程。但我在两个.cpp文件中都低于。它包括彼此。我认为AppDlg应该是App.
#include "App.h"
#include "AppDlg.h"
Run Code Online (Sandbox Code Playgroud)
这两个问题让我对项目的结构感到困惑。
为什么 MFC 代码看起来如此不同?这样做的目的是什么?
您没有“main”函数的原因(引用是因为它实际上没有被调用main(a))是因为代码已经为您编写好了。这在框架中很常见,其中在您负责的代码实际开始运行之前完成了一定数量的设置。
事实上,这往往是即使是在您的情况的情况下就创建一个main(),因为通常有启动代码这是负责做这样的事情转动参数到argc/argc对象交出你的主代码(如果你看到一个物体文件像crt0.oor ucrt.lib,这可能是 C 运行时启动代码)。
在 Windows 的早期,您编写的代码有一个WinMain()函数(a),由启动代码代替 调用main(),它通常负责注册窗口类、创建和启动消息泵,以及各种在每个应用程序中通常相同的其他东西。因此,通过将这项工作转移到某种描述的框架中,它大大减少了您需要编写的代码量。
就其工作原理而言,想想如果您链接的内容包含以下内容会发生什么:
int main(int argc, char *argv[]) {
return bob(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)
然后你的代码不会真的需要一个main()在所有功能。它当然需要一个bob()函数,这与您发现的情况非常相似:Microsoft 在 MFC 框架中编写了他们自己的“主”函数,它设置了一些东西,以便 MFC 能够工作。
诚然,我的基于 bob 的框架并没有像 MFC 那样提供那么多的好处,但它只是一个例子,说明如何做到这一点:-)
就每种项目类型创建的每个文件的内容而言,此链接可能会有所帮助。例如,您提到的两个文件包含在:
<projname>.h :程序或 DLL 的主要包含文件。它包含#include其他头文件的所有全局符号和指令。它从C<projname>App类派生CWinApp并声明一个InitInstance成员函数。对于控件,C<projname>App类派生自COleControlModule.
<projname>dlg.cpp和<projname>dlg.h:如果您选择基于对话框的应用程序,则创建。这些文件派生并实现了名为 的对话框类,C<projname>Dlg并包含用于初始化对话框和执行对话框数据交换 (DDX) 的骨架成员函数。您的 About 对话框类也放在这些文件中,而不是放在<projname>.cpp.
请注意,这些描述中没有关于消息泵的任何内容(例如)。那是因为所有繁重的工作都包含在所创建事物的基类中。
(a)在 The Old New Thing 上的这篇文章中main()可以找到它的原因- 它基本上是为了确保所提供的语言与 Windows 需要的语言之间没有冲突。