win32控制台、win32工程、MFC工程的区别

  1. 空项目
  2. 控制台

  3. win 32

  4. mfc


问2个问题即可。

1.控制台 VS win32 mfc?

嗯,有不有脸?

有脸,选win32或mfc。没有脸,选控制台。

脸就是窗口,就是window......s

(这个有脸)

(这个没脸)

控制台与win32 mfc:交互方式的不同,前者是CML(命令模式),后者是GUI(用户界面)。


2.MFC VS win32

嗯,是不是“国”字脸?

是“国”字脸,选mfc。是DIY的脸,选win32。

(国字脸1)

Visual Studio C++ 创建新项目蹦出来如下选项:

Win32控制台应用程序,Win32项目,MFC有什么区别?

正文:

  1. Win32控制台,没有界面,命令行执行生成的文件则直接在后台运行,运行效果如下:
    生成的“.exe”文件相当于Linux系统下用gcc编译出来一个“.out”文件,直接运行操作即可,只有命令符,没有界面。

  2. Win32项目
    这个就有界面了,但是界面里面的控件,基本上要自己去实现。

  3. MFC项目(Microsoft Foundation Class Library,微软基础类库)
    这个也有界面,可是界面里面的控件就不需要自己实现了,常用的控件都已经在MFC库内写好,直接拖动即可。

对visual C++来说,不同的项目会有不同的初始代码模版和参数设置,这些参数包括:C++编译器参数,链接器参数等。如果愿意并且不嫌麻烦的话,通过项目属性对话框调整参数,它们之间是可以相互转换的。
具体的差异如下:
Win32控制台程序:初始代码模版以main为程序入口,默认情况下,只链接C++运行时库和一些核心的win32库,链接器subsystem参数为console类型,所以编译出来的程序会有黑色的控制台窗口作为呈现标准输入(stdin)和标准输出(stdout)。

Win32工程:初始代码模版实现一个简单的windows窗口,以WinMain作为程序入口,引用了win32Api头文件和库,链接器subsystem参数为windows,所以生成的程序不带黑色的控制台,直接使用标准输入和标准输出,看不到效果。

mfc工程:本质上是个win32工程,只是默认帮你引用了mfc框架的头文件和库,并且程序入口由mfc框架提供,不需要自己写。
 

采用控制台还是win32 MFC,取决于是否需要同用户进行交互,以及交互的频率是高还是低。字处理软件需要实时查看编辑成果,所以采用了窗口;而一个木马程序,采用了窗口就会暴露自己,所以采用控制台。

需要与用户进行大量交互或者要满足“所见即所得”,采取wn32 mfc;无需交互或者交互极少,采用控制台。

windows提供win32 api以供程序员完成各种操作,所以控制台,win32,mfc都可直接调用win32 api。

但直接使用win32 api,用代码完成诸如创建窗口,显示窗口等操作太过繁杂,于是我们把这些代码结合抽取取来,变成OOP中的类,也就是微软基础类库(MFC)。

只强调实用与开发效率,用MFC;强调用户体验与软件细节,使用WIN32。MFC可以实现的,WIN32都可以实现。反之不可。

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Win32控制台应用程序和Win32项目的区别及转换

实际上两者并没有多大区别。最大的区别当然是程序入口了,console的入口是main,Windows的入口时WinMain。而程序的入口点是可以重新设置的。我们可以在console应用程序中设置其入口点为WinMain,反之亦然。 
它们主要的区别是定义的宏不同,一个是WIN32,另一个是CONSOLE. 
在预处理中把_WINDOWS换成_CONSOLE就行了 
project settings -> Link :将/SUBSYSTEM:WINDOWS开关改为/SUBSYSTEM:CONSOLE 
可将Win32控制台程序 当成 在Win32项目 使用,反之亦然。 

把/subsystem:windows或/subsystem:console删除,由编译器自己决定也可以

猜你喜欢

转载自blog.csdn.net/qq_41786318/article/details/81224017