Win32控制台应用程序,Win32项目,MFC应用程序的区别与联系

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中

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aly_D

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值