Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系
- Win32控制台程序
初始化代码模板以Main为程序入口,默认情况下,只链接C++运行时库和一些核心的Win32库,链接器subsystem参数为console类型,所以编译出来的程序会有黑色的控制台窗口作为呈现标注输入(stdin)和标准输出(stdou)
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
- Win32项目
初始代码实现一个简单的windows窗口,以_tWinMain作为程序入口,引用了Win32Api头和库,衔接器subsystem参数为windows,所以生成的程序不带黑色的控制台,直接使用标准输入的标准输出,看不到效果。
开发时一般调用的都是WIndowsAPI
int APIENTRY _tWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPTSTR lpCmdLine,
_In_ int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// TODO: 在此放置代码。
MSG msg;
HACCEL hAccelTable;
// 初始化全局字符串
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_WIN32PROJECT1, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);
// 执行应用程序初始化:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}
hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_WIN32PROJECT1));
// 主消息循环:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return (int) msg.wParam;
}
-
MFC应用程序
本质上是个win32工程,只是默认帮你引用了mfc框架的头文件和库,并且程序入口由mfc框架提供,不需要自己写。 -
三种应用程序的区别
1)Win32控制台程序,没有界面,只有命令符。生成的".exe"文件直接运行操作即可。
2)Win32项目,有界面。但是界面里的控件。基本需要自己去实现。
3)MFC应用程序,也有界面,但界面里的控件不需要自己去实现了,常用的控件都已经在MFC库内写好,直接拖动即可。
4)控制台与Win32、MFC的交互方式不同,前者采用的是CML(命令模式,也有人说是CUI(Console iser Input)),后者是GUI(用户界面)
5)Win32项目的界面比较符合UI界面设计;而MFC应用程序的界面基本都一样,因为它们都是同一套控件模板。
- Windows应用程序的类型
-控制台程序Console
DOS程序,本身没有窗口,通过Windows DOS窗口执行
-窗口程序
拥有自己的窗口,可以与用户交互
-库程序
存放代码、数据的程序,执行文件可以从中取出来代码执行和获取数据
-静态库程序
扩展名LIB,在执行文件执行时从中获取代码
-动态库程序
扩展名DLL,在编译链接程序时,将函数地址放入到执行文件中
- 三种应用程序的对比
-入口函数
控制台程序-_tmain
窗口程序-_tWinMain
动态库程序-DllMain
静态库程序-无入口函数
-文件存在方式
控制台程序、窗口程序-EXE文件
动态库程序-DLL文件
静态库程序-LIB文件
-执行方式
控制台-在DOS窗口内执行
窗口程序-拥有自己的窗口中自己的窗口内执行
动态库程序-本身无法执行,由可执行程序或其他的DLL调用
静态库程序-执行不存在,代码会嵌入到可执行文件或DLL中