《Win32篇》Win32文件结构

《Win32篇》Win32文件结构

Win32文件结构

参考链接:https://www.cnblogs.com/linuxAndMcu/p/12075196.html

Win32是什么

Win32 是指 Microsoft Windows 操作系统的 32 位环境,与 Win64 都为 Windows 常见环境。

这里再介绍下 Win32 Application 和 Win32 Console Application 之间的区别:

1、程序不同

Win32 Application 是标准 windows 程序,完全拥有 windows 的特性,可以通过鼠标点击窗口来完成控制。

Win32 Console Application 是控制台应用程序,类似于 MS-DOS 窗口,只能运行命令行程序,不具备消息响应机制。

2、入口函数不同

Win32 Application 入口函数是 WinMain(),它具有消息响应机制,可以运行图形化的 C++ 程序。

Win32 Console Application 入口函数是 main(),可以访问部分 windows API 函数,如果你编写传统的 C 程序,必须建立 Win32 Console 程序。

简单创建win32项目

参考链接:https://blog.csdn.net/wowocpp/article/details/79260945

使用的是vs2013 中文版

1、创建项目

2、加上代码

在hello.cpp中加入

#include

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)

{

MessageBox(

NULL,

TEXT("随便提示一些内容就可以了!哈哈哈!"), // 内容

TEXT("这里是标题!"), // 标题名称

0);

return 0;

}

执行一下,效果如下

文件结构分析

1、头文件

#include

windows.h 是一个最重要的包含文件,它囊括了若干其他 Windows 头文件,其中的某些头文件又包含另外的一些头文件。

下列几个是最重要也是最基本的头文件:

WINDEF.H 基本数据类型定义。

WINNT.H 支持 Unicode的类型定义。

WINBASE.H 内核函数。

WINUSER.H 用户界面函数。

WINGDI.H 图形设备接口函数。

这些头文件定义了 Windows 的所有数据类型、函数调用、数据结构以及常量标识符。

2、程序入口

main 是 C 程序的入口,而 Windows 程序的入口是 WinMain,它总是这个样子的:

int WINAPI WinMain( HINSTANCE hInstance,

HINSTANCE hPrevInstance,

PSTR szCmdLine,

int iCmdShow)

WinMain 函数的返回值被定义为 int。WINAPI 标识符在 WINDEF.H 中定义,它规定了一种函数调用约定。而我们绝大多数 Windows 函数调用都定义成 WiNAPI。

我们再来研究一下它的参数部分:

第一个参数一般叫做 “实例句柄”(Instance Handle)。

在 Windows 程序中,句柄无非就是一个数值,程序里用它来标识某些东西。比如在我们这个例子里,这个句柄就唯一标识了我们的这个程序,代表程序本身。实际上在某些Windows程序中,把句柄当作调用参数是必须的。比如在早期的 Windows 版本中,当多路并发运行同一个程序时,就需要为那个程序创建多个实例。同一程序的所有的实例都共享代码和只读存储。

第二个参数

一个程序可以通过查看 hPrevInstance,也就是第二个参数从而知道是否有它的其他实例正在运行。它也就可以因此跳过某些零散杂务步骤,把一些数据从前一个实例搬到自己的数据区来。但是在 32 位Windows 中,这一概念已不再采用。 因此 WinMain 的第二个参数通常总是 NULL(定义为 0)。

第三个参数

WinMain 的第三个参数是用来运行程序的命令行(Command Line)。有些 Windows 程序在启动时用它来把文件装入内存。

第四个参数

WinMain 的第四个参数用来指明程序最初如何显示或正常显示,或最大化到全屏,或最小化显示在任务栏上。

3、MessageBox函数

最后我们看一下最主要的 MessageBox 函数。

MessageBox 函数是用来显示短信息的。尽管形式比较单一,MessageBox 所显示的小

小窗口实际上也是一个对话框。

我们也研究一下它的几个参数:

第一个参数

MessageBox的第一个参数通常是一个窗口句柄。我们先不管它。

第二个参数就是将要在信息框里出现的文本字符串。

第三个参数是将要在标题栏上显示的文本字符串。

而且在这个程序中,我们把所有的字符串都打包到 TEXT 宏代码里面,就是用TEST("XXX")把它包裹起来。一般来说,并不需要把所有的字符串都打包到 TEXT 宏代码里面,之所以这样做是因为这样在把程序转换成 Unicode 时会方便很多。

第四个参数是以前缀MB_打头的一些常量的组合。

WINUSER.H 中定义了这些相关常量。比如下面的这些,你可以任选一个来表示在对话框里希望用哪种按钮:

其中,第四个参数的可用按钮如下

#define MB_OK 0X00000000L // ok

#define MB_OKCANCEL 0x00000001L // ok和取消

#define MB_ABORTRETRYIGNORE 0x00000002L // 中止、重试和取消

#define MB_YESNOCANCEL 0x00000003L // yes/no/取消

#define MB_YESNO 0X00000004L // yes和no

#define MB_RETRYCANCEL 0x00000005L // 重试和取消

相关阅读

蚂蚁森林能量产生规则是什么?能量获取方式及能量产生明细规则
从入门到精通:POS机刷信用卡完整操作手册与故障排除指南
365bet比分直播

从入门到精通:POS机刷信用卡完整操作手册与故障排除指南

🕒 10-06 👁️‍🗨️ 2250
天猫、京东等平台“618”战报出炉!全网零售额近2万亿元
oppo明星代言费平摊到每个手机上也就几块钱,没关系
365bet比分直播

oppo明星代言费平摊到每个手机上也就几块钱,没关系

🕒 09-14 👁️‍🗨️ 8109
2025年德国(Germany)节假日一览表
365bet比分直播

2025年德国(Germany)节假日一览表

🕒 07-21 👁️‍🗨️ 7820
WPS共享文件夹网络及保存相关问题
bet3365游戏

WPS共享文件夹网络及保存相关问题

🕒 08-02 👁️‍🗨️ 177
iPhone使用爱思助手怎么备份/下载SHSH?
365游戏厅网页登录

iPhone使用爱思助手怎么备份/下载SHSH?

🕒 07-06 👁️‍🗨️ 9717
2023年世界杯篮球赛资格赛
365游戏厅网页登录

2023年世界杯篮球赛资格赛

🕒 07-14 👁️‍🗨️ 8119
mac的applications在哪
365bet比分直播

mac的applications在哪

🕒 09-06 👁️‍🗨️ 2824