菜单

仿printf的messagebox弹窗函数

2019年2月25日 - www6165com

  MessageBoxA(NULL, “弹出框内容”,
“标题”, MB_OK);   // TEXT可有可无

2.1.1       Windows数据类型示例.. 1


源码

  相当于本身安顿出来二个接近printf的小工具,因为微软的确尚未规划MessageBox中展开格式化输出的函数。

2.3.3       Gdi32.dll 16

int MessageBox(
  HWND hWnd,          // handle of owner window, 窗口的一个句柄
  LPCTST路虎极光 lpText,     // address of text in message box,
二个文书(字符串)的指针
  LPCTST福特Explorer lpCaption,  // address of title of message box,
题目字符串的指针
  UINT uType          // style of message box, 对话框的风骨
);

} else{

  …表示的情趣是流传的参数是可变参数个数的,va_start(pArgs,
szFormat);表示指向szFormat之后的三个参数,这么些函数的浩大东西我前几日也还没了然过来,之后再来补充,不过未来画虎不成反类犬这些函数大家能够协调写个Message博克斯Printf();函数,具体代码如下:

2.3.2       User32.dll 16

 

DWO君越D temp;//用来获得数字的值的

  MessageBox(NULL, TEXT(“弹出框内容”),
TEXT(“标题”), MB_OK);

2.2.1       系统大旨服务.. 7

中间由注脚可以看出, WinMain函数的重返值被定义为int型;
WINAPI为WinMain函数的调用规则, 在WINDEF.H对”WINAPI”作出了之类宏定义:

DWORD straddress[100] = { 0 };//字符串参数地址,最多93个

  初次之外,它还有多少个姐妹:

2.1.2    Windows 数据类型与标准C 数据类型的关联

查看 Windows 数据类型的概念能够看到,全数的 Windows 数据类型都是由 C
数据类型经过类型重定义获得的。如 DWO凯雷德D 实质上正是 unsigned long
数据类型,32 位的无符号整型:

typedef unsigned long       DWORD;

 

实际 VC 编译器是三个完好无缺的 C 编写翻译器,其它并没有过多的扩展。Windows
数据类型也不是 VC 的内建项目,而从规范 C 类型重定义获得。

1>.对话框按钮类型:

temp = ebpnum + 4 * param + 8;

  刚开首读书Windows程序设计,磕磕碰碰,先做个小笔记缓缓神经,首假若将MessageBox那些Windows
API函数的。

2.3.3    Gdi32.dll

Gd132.dll 是 Windows GDI 应用程序设计接口,Gdi32.dll
导出了与此相关的多少函数,如 GetTextColor、LineTo、TextOutA 等。

MessageBox( NULL, TEXT(“Hello,world!”), TEXT(“MessageBox”), 0 );

}

  MessageBoxW(NULL, L””, L””, MB_OK);  
                    // 那一个L用来表示Unicode,不得以归纳

2.2    Windows API 的法力分类

Windows API
所能完结的成效包涵过多上边,在进行应用程序的付出时,开发职员大概会利用到文件、进度、内部存款和储蓄器、权限、系统信息等种类的基本服务和系统一管理理类的
API,或者会用到图形用户界面、控件等函数和目的,可能供给在界面上制图图像处理多媒体音讯等,还包蕴开始展览网络通讯支出等。

*程序的进口
在Win32控制台程序(Win32 Console Application)中,
应用程序的入口为main()函数,
windows程序的顺序入口和win32控制台程序的输入类似, 为WinMain()函数.
次第的入口函数在WI美职篮SE.H作出了证明, 注明如下:

add eax, 2//地址偏移+2

  MessageBox函数是很几个人刚开端上学Windows程序设计如故是Windows
API碰着的率先个放置函数,这一个函数使用的章程是:

2.3.4    标准C函数

专业 C 程序是一种标准,任何帮衬 C 语言应用程序开发的体系都应有提供 C
语言库函数的 调用。在系统环境下选拔正式 C
实行程序开发时,用户所选取的库函数实际上是由操作系统提供的。就是出于各类主流操作系统都提供了一套标准
C 库所定义的函数接口,标准 C
函数库才会有那样广泛的逾越操作系统平台。所以 C
程序依然凭借于操作系统开发人士为其促成接口,而 C
库函数的落到实处如故凭借于操作系统提供的调用接口,如正式 C 函数 fopen
函数在Windows 系统中的达成就依靠于 API CreateFile 函数(CreateFile
完结了文本的创立和开拓等操作)。

Windows 系统的 C 标准库函数接口首要设有于crtdll.dll 中。实际上,C
标准函数库必须由操作系统为其提供接口,不然使用正式 C
开发的顺序无法在特定的系统上运转。 Windows XP SP2 系统中,crtdll.dll 有
526 个导出函数,如 fopen、printf. strlen等。

图片 1

UINT num = 0;

  那个缓冲区的方法尽管用在MessageBox函数里面,就足以兑现打字与印刷变量的法子,比如以下代码:

 

#define MB_ICONWARNING              MB_ICONEXCLAMATION        
//警告
#define MB_ICONERROR                MB_ICONHAND               
//错误
#define MB_ICONINFORMATION          MB_ICONASTERISK           
//信息
#define MB_ICONSTOP                 MB_ICONHAND               
//停止

test = lstrlen(number);

 1 int main(){
 2     
 3     int a = 12;
 4     char szBuffer[100];             // 使用一个字符数组来做缓冲区
 5 
 6     sprintf(szBuffer, "helloworld %d.\n", a);
 7     _snprintf(szBuffer, 100, "helloworld %d.\n", a);
 8         // 使用_snprintf函数比较安全,因为可以输入限定字符的个数  
 9 
10     printf("%s.\n", szBuffer);
11     puts(szBuffer);                            // 可以使用printf中的%s将szBuffer打印出来,或者用puts直接输出
12     //printf("helloworld.\n");
13 
14     system("pause");
15     return 0;
16 }

2.2       Windows API 的效能分类.. 7

小编的意见: 感觉立马就要晕了, 疑问一:
“由此WinMain的第3个参数日常总是NULL”,
那么首先个吗?WinMain的率先个参数会不会也足以是NULL呢? 疑问二:
WinMain函数的参数从何而来?是操作系统么?带着疑问继续向下看。

//int 3

  

2.2.4    图像和多媒体

Windows 的图像引擎和多媒体编制程序有多样接口,包含最核心的
GDI、GDI+,以及更尖端的OpenGL、DirectX 等图像引擎编程接口。DirectX 和
OpenGL
在打闹开发、动画制作等地方采取比较广泛,使用它们进行应用程序开发供给专门的
SDK。本书只讲解 GDI,对一般的应用程序开发,已经丰盛使用。

GDI
的基本概念包罗图像(Image)、位图(Bitmaps)、笔(Pen)、画刷(Brush)、文本和字体(
Text and
Fonts)、线(Line)、区域(Regions)、形状(Shapes)等。当中央的效益是对展现设备实行控制、获取和改动有关布置,在微型总结机荧屏上海展览中心示用户所供给出示的剧情。

在VC6.0环境下,新建WIN32
Application,选中C++Sources文件,添加cpp文件后,敲出如上代码,编写翻译,运转,出现下边窗口:

xor ebx, ebx

// 自己做一个格式化的messageboxprintf对话框
int CDECL MessageBoxPrintf(TCHAR * szCaption, TCHAR * szFormat, ...){

    TCHAR szBuffer[1024];
    va_list pArglist;

    va_start(pArglist, szFormat);
    _vsnprintf(szBuffer, sizeof(szBuffer)/sizeof(TCHAR), szFormat, pArglist);
    va_end(pArglist);

    return MessageBox(NULL, szBuffer, szCaption, MB_OK | MB_ICONINFORMATION);
}


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

    int x=100, y=200, z=300;
    int cxScreen, cyScreen;

    cxScreen = GetSystemMetrics(SM_CXSCREEN);
    cyScreen = GetSystemMetrics(SM_CYSCREEN);

    // MessageBoxW(NULL, L"helloworld", L"biaoti", MB_OK);
    // MessageBoxA(NULL, TEXT("helloworld"), TEXT("biaoti"), MB_OK);
    MessageBoxPrintf(TEXT("我的标题"), TEXT("hello %d %d %d"), x, y, z);    // 把这个函数做好后,直接就可以输出
    MessageBoxPrintf(TEXT("我的屏幕大小"), TEXT("我的屏幕宽度是:%d.\n高度是:%d.\n"), cxScreen, cyScreen);


    return 0;
}

2.5       小结.. 23

 

sss2 :

 

2.2.2    系统一管理理

系统一管理理是 Windows 系统中很关键的剧情。Windows 系统提供了以下地点的 API
供应用程序开发职员使用,包罗:管控台接口、程序安装、系统复苏、任务调度、Windows
运程管理。

并且, 在这么些图标中有些还足以用别样名目代替,
那一个别名在WINUSEEvoque.H的概念如下:

__asm{//获取字符串的尺寸,Unicode版本

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 int main(){
 5
 6     int x=100, y=200, z=300;    
 7     
 8     printf("%d %d %d.\n", x, y, z);
 9     system("pause");
10     return 0;
11 }

2.2.6    其余职能

Windows API
能达成的效应还有许多,限于篇幅不可能全体介绍。有一对剧情本书未涉嫌,但是Windows API 也提供了连带接口。

  1. 数量存款和储蓄和走访、数据库

总结微软的“动态数据存取组件”技术(MDAC,包罗了 ADO、ODBC)、OLE
数据库、XML 标准、微软 XML、可扩大存在引擎等多地点内容。主如若 Windows
系统内的数据库文件、Windows.系统对数据库的走访接口等技术。

2.新闻与同盟

音讯与合营大多是 Windows
系统自带的一些应用程序所提供的支出接口。个中最首要的始末是“合作数据对象”(
CDO)。CDO 包蕴了若干种 Windows 数据传输典型应用,包涵 Mssager
(MSN)、邮件 SMTP (Outlook)应用接口等。

3.Web 开发

IIS(Intemet Information
Server,互连网消息服务)等应用程序提供的支付接口,使用户能够一直在
Windows 平台上海展览中心开 Web 开发,开发的程序运营于 ns
框架下。“数据存在与走访”、“信息与同盟”、“Web 开发”等都得以归为 COM
开发的限量内。COM 是 Windows
应用程序接口的一种,具有稳定的接口格局,大多是 Windows
系统中自带的应用程序所提供的支出接口的聚合。

4>. WinMain的第八个参数是二个int型参数,
用来指明程序(窗口)最初怎样被突显, 例如最小化?最大化?全屏?
小编的见地: 应该很有用, 通常见一些游玩一运转正是全屏的,
不过其一参数也是顾虑系统传给程序的么?因为从平时运作Windows程序时都以间接双击,
并没有通过命令行给它传到参数,
在编程时应当对先后运行时的显示方式有坦白才对,
那样系统再运转时再把这一个交代的参数字传送入给程序告诉程序运转时应该怎么着显示.

mov ecx, arrnum

  这一个printf函数不仅能够运用四个参数打字与印刷,仍是能够用来从来打字与印刷变量,可是MessageBox却不可能一贯打字与印刷,这几个引起自个儿的第三手思考。小编先想到的是成立3个缓冲区,利用这几个缓冲区取打字与印刷字符数量。当然打字与印刷的函数得利用sprintf了

2.1.1    Windows数据类型示例

实例2-1使用了二种为主的 Windows 数据类型,演示 Windows
数据类型在程序中的使用办法。

  1. 实例2-1 常用Windows数据类型演示(DWO奥迪Q5D/LPSTKuga/CHA奥迪Q7/INT)

本实例定义了多少个常用常量的 Windows 数据类型,包涵 DWOSportageD,LPST昂Cora 和
CHAGL450,并演示了哪些使用它们进行了复制、相比大小等操作。

/* ************************************
*《精通 Windows API》 
* 示例代码
* windata.c
* 2.1.1  常用的 Windows 数据类型
**************************************/
/* 头文件  */
#include <windows.h>
#include <stdio.h>
/* ************************************
* 功能  Windows 数据类型演示
**************************************/
int WINAPI WinMain( 
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
)
{
//定义字符串
LPSTR szString = "Windows data type, string.";
//定义字符数组
CHAR lpString[120];//要大于 szString 的长度
//定义 DWORD 类型的数据
DWORD dwMax = 0xFFFFFFFF;
DWORD dwOne = 0x1;
//定义 INT 类型的数据
INT iMax = 0xFFFFFFFF;
INT iOne = 0x1;
//显示字符串
MessageBox(NULL,szString,"LPSTR",MB_OK);
//复制内存,将字符串复制到数组中(包括 NULL 结束符)
CopyMemory(lpString, szString,lstrlen(szString)+1);
//显示复制的字符串
MessageBox(NULL,lpString,"CHAR[]",MB_OK);
//比较 DWORD 并显示结果
if(dwMax>dwOne)
{
MessageBox(NULL,"DWORD 类型的数据 OxFFFFFFFF > 0x1","DWORD",MB_OK);
} 
//比较 INT 并显示结果
if(iMax<iOne)
{
MessageBox(NULL,"INT 类型的数据 OxFFFFFFFF < 0x1","INT",MB_OK);
}
return 0;
}

 

 

在这些顺序中,使用了 4 种 Windows 数据类型,分别是 LPST哈弗、CHA大切诺基、DWO帕杰罗D 和
INT。

LPST奇骏 类型的数码是字符串,也正是字符指针,CHA奥迪Q5 是字符,DWO奥迪Q7D 是 叁10人的无符号整数,INT 是 32 位有号子整数。程序运转后会弹出 5个对话框。那评释 dw马克斯>dwOne 是确立的。i马克斯<iOne 也是起家的。dwMax与 i马克斯 的数值是同等的,dwOne 与 iOne
的数值也是平等的。可是正如结实区别,是因为两者的数据类型不等同。

 

  1. 查阅Windows数据类型的定义

在 Visual Studio
中得以查阅数据类型的定义。在数据类型的连串名(比如“DWO猎豹CS6D”)上单击右键,选取“转到定义”,如图
2-1 所示。

 图片 2

图2-1

能够从 SDK 的头文件中看出各项指标类型定义。

“INT”的概念如下:

 typedef int                 INT;

 

“DWO昂CoraD”的概念如下:

 typedef unsigned long       DWORD;

 

“CHA帕杰罗”的概念如下:

 typedef char CHAR;

 

    从中能够窥见,那个 Windows 数据类型都以从标准 C
的数据类型经过类型重定义而来。INT 数据类型是有记号整型,DWOKugaD
数据类型是无符号整型。 那就印证了为啥在实例 2-1 中 INT 数据类型的变量
i马克斯 实际是“-1”,而 DWO奥德赛D 类型的变量 dwMax实际是“4294967295”,所以会见世如上的可比结实。

  1. 最广泛的Windows数据类型

表2.1 常用的大旨Windows数据类型

类型

描述

BOOL

布尔型变量(值只能是True或False)

BYTE

字节类型(8位)

CHAR

8比特字节(ANSI)

CONST

常量,相当于标准C中的”const”关键字

DWORD

32字节无符号整型数据

DWORD32

32字节无符号整型数据

DWORD64

64字节无符号整型数据

FLOAT

浮点数据类型

HANDLE

对象的句柄,最基本的句柄类型

HICON

图标的句柄

HINSTANCE

程序实例的句柄

HKEY

注册表键的句柄

HMODULE

模块的句柄

HWND

窗口的句柄

INT

32位符号整型数据类型

INT_PTR

指向INT类型数据的指针类型

INT32

32位符号整型

INT64

64位符号整型

LONG

32位符号整型,相当于C语言的标准数据类型long

LONGLONG

64位符号整型

LONG32

32位符号整型

LONG64

64位符号整型

LPARAM

消息的L参数

WPARAM

消息的W参数

LPCSTR

Windows(ANSI)字符串常量

LPCTSTR

根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型,否则是LPCSTR类型

LPCWSTR

UNICODE字符串常量

LPDWORD

指向DWORD类型数据的指针

LPSTR

Windows(ANSIC)字符串常量

LPTSTR

根据环境配置,如果定义了UNICODE宏,则是LPTSTR类型,否则是LPSTR类型

LPWSTR

UNICODE字符串常量

SHORT

无符号短整型(16位)

SIZE_T

表示内存大小,以字节为单位,其最大值是CPU最大寻址范围

TCHAR

如果定义了UNICOD,则为WCHAR,否则为CHAR

UCHAR

无符号CHAR

UINT

无符号INT

ULONG

无符号LONG

VOID

无类型,相当于标准C语言的void

WCHAR

16位Unicode字符

WINAPI

Windows API的函数调用方式,常见于SDK头文件中对API函数的声明中,相当于__stdcall(更严格讲,不是数据类型,而是函数调用约定)

WORD

16位无符号整型数据

  1. Windows数据类型名称命名的原理

Windows 数据类型的命名都很有规律。

核心数据类型包含 BYTE、CHAR、WOPRADOD、SHOKoleosT、DOWTiguanD、INT 等。

指针类型的下令格局相似是在其针对性的数据类型前加“LP”或“P”,比如对准
DWO哈弗D的指针类型为“LPDWO奔驰M级D”和“PDWOPAJEROD”。

各样句柄类型的指令格局一般都以在目的名前加“H”。Windows
系统中有众多对象,全部代表三个目的的数据类型都以句柄,每一个对象都对应着一种句柄类型,比如与位图(
BITMAP)对应的句柄类型为“HBITMAP”,与菜单(MENU)对应的句柄类型为“HMENU”,与窗口(WINDOW)对应的句柄类型为“HWND”。无符号类型一般是以“U”初始,比如“INT”是符号类型,“UINT”是无符号类型,“LONG”是标志类型“ULONG”是无符号类型等。

    #define MB_OK                       0x00000000L           
//仅有一个”分明”按钮
    #define MB_OKCANCEL                 0x00000001L           
//”确定” + “取消”
    #define MB_ABORTRETRYIGNORE         0x00000002L           
//”终止” + “重试” + “忽略”
    #define MB_YESNOCANCEL              0x00000003L            //”是”

}

 

2.4    Unicode和多字节

Windows 既能够采纳 Unicode
字符集又能够采取守旧的字符集(如多字节编码)来兑现对多样语言的支撑,以适应国际市集的渴求。与守旧的字符集编码相比较,Unicode
是社会风气通用的字符编码标准,使用 16 位数据表示三个字符,一共能够代表 65535
种字符,能够总结现代总结机中所使用的有着字符,包罗各类字母、文字、在出版业中利用的特殊符号等。
守旧的字符集,如 Windows ASNI 字符集,使用 8 位数据或将紧邻的四个 8个人的多少整合在联合表示11分的言语字符。Windows 系统选取了 ASNI
字符的恢弘格局,若是一个字节是负数,则将其持续的二个字节组合在联合署名表示二个字符。那种编码格局的字符集也号称“多字节”字符集。

在 Windows 系统中,Unicode 字符编码和多字节字符编码都能够使用。

  1. 实例 2-4 Unicode 与多字节编码演示

    / **《精通 Windows API》

    • 以身作则代码
    • StringCode.c
    • 2.4 Unicode 和多字节
      **/
      / 预处理 /
      / 头文件 /
      #include
      /* **
    • 职能 Unicode 与多字节编码演示
      **/
      int WINAPI WinMain(
      HINSTANCE hInstance,
      HINSTANCE hPrevInstance,
      LPSTXC90 lpCmdLine,
      int nCmdShow
      )
      {
      //定义 LPWST奥迪Q5 类型的宽字符串
      LPWSTEscort szUnicode = L”This is a Unicode String;”;
      //定义 LPSTRAV4 类型的窄字符串
      LPSTPAJERO szMutliByte = “This is not a Unicode String;”;
      //定义 LPTST本田UR-V 类型的自适就字符串
      LPTST奥迪Q5 szString = TEXT(“This string is Unicode or not depends on the option.”);
      //使用 W 版本的 API 函数,以宽字符串为参数。
      MessageBoxW(NULL,szUnicode,L”<字符编码 1>“,MB_OK);
      //使用 A 版本的 API 函数,以窄字符串为参数。
      MessageBoxA(NULL,szMutliByte,”<字符编码 2>“,MB_OK);
      //使用自适用的 API 函数,选用相适应的字符串类型为参数。
      Message博克斯(NULL,szString,TEXT(“<字符编码 3>“),MB_OK);
      return 0;
      }

 

在本实例中,一共动用了 3
类别型的字符串变量,每连串型的字符串变量的初阶化是例外的,如表 2.2
所示。

表2.2 字符串与起先化

类型

变量类型

初始化形式

Unicode

LPWSTR

L”string”

多字节

LPSTR

”string”

根据开发环境的设置自动适应

LPTSTR

TEXT(”string”)

本实例首先选拔“多字节”形式进行编写翻译。可以行使二进制编辑器来查阅编写翻译获得的可执行文件,上例中定义的字符串分别存款和储蓄为以下格局。使用二进制编辑器查看,能够从
exe可执行文件中找到如下音信。读者能够对照 ASCII 编码表查看。

“This is a Unicode String;”使用 Unicode 格局的十六进制编码:

54 00 68 00 69 00 73 00 20 00 69 00 73 00 20 00 61 00 20 00 55 00 6e 00 69 00 63 00 6f 00 64 00 65 00 20 00 53 00 74 00 72 00 69 00 6e 00 67 00 3b 00

 

 图片 3

“This is not a Unicode String;”使用 ASCII 格局的十六进制编码:

54 68 69 73 20 69 73 20 61 20 55 6e 69 63 6f 64 65 20 53 74 72 69 6e 67 3b

 

 图片 4

“This string is Unicode or not depends on the option.”的ASCII
格局的十六进制编码:

54 68 69 73 20 73 74 72 69 6e 67 20 69 73 20 55 6e 69 63 6f 64 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 65 20 6f 70 74 69 6f 6e 2e

 

随后是“<字符编码 1>”和 Unicode 编码、“<字符编码
2>”和“<字符编码
3>”的多字节编码。对汉字字符,三种编码的办法是例外的,如“字符编码”七个字,三种编码分别为:

Unicode编码

57 5b 26 7b 16 7f 01 78

 

 图片 5

和多字节ASCII

d7 d6 b7 fb b1 e0 c2 eb

 

 图片 6

读者能够分析设置使用 Unicode
字符集后编写翻译完毕的可执行文件与安装为多字节字符集后编写翻译得到的可执行文件有啥样两样。

 

  1. 在工程安插中精选编码方式

安装的主意是在Visual
Studio工程属性中精选“配置属性”→“常规”→“字符集”选项中开展抉择。

*WinMain函数的参数:
1>. WinMain的首先个参数 HINSTANCE hInstance,
用书上的分解为”实例句柄”, 由于第3回接触C语言Windows程序设计,
对这么些句柄的概念也不是很领悟, 去完善了下,
句柄的解释为”四个句柄是指利用的多个唯一的平头值,即1个四字节长的数值,来注明应用程序中的不一致对象和同类对象中的分裂的实例,诸如,三个窗口,按钮,图标,滚动条,输出设备,控件只怕文件等。”——引用自百度百科->句柄。

} else{

 

2.3.5       其他Dll 17

 

//——————————————–

  就如C语言中平时使用printf函数,这几个函数挺有趣的,应为函数输入的参数是不曾范围个数的,约等于是随机改变的。例如:

2.2.2       系统一管理理.. 9

作者是如此对句柄进行领会的, 在3个应用程序中,
常常制造了诸多的窗口、按钮、标签, 大概利用了2个文件等,
在先后的别样地点, 只要可以拿走那一个被号称句柄的东西,
就可见找到该控件或然窗口在内部存储器中的地点,
从而对其进行操作。感觉有点像带参数的main函数,
只是此处的主函数参数为3个句柄。

i++;

  其实之所以有这七个是因为微软须求满意Windows
98之后对汉字等其他语言编码的急需,那种须要通过Unicode达成,可是微软本意不是要大家使用Unicode来编制程序,而是经过行使“通用”形式,也等于MessageBox();函数,达成分歧的编码重要照旧经过IDE集成开发条件下转移分歧的编码情势。回到MessageBox();,前些天比较头疼的是,怎么在MessageBox();中落到实处变量的打字与印刷呢?

2.3.1       Kerne132.dll 16

dec testnum

#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){
    int a = 12;

    TCHAR szBuffer[100];                  // 通用版本
    _stprintf(szBuffer, TEXT("hello 通用 %d"), a);
    MessageBox(NULL, szBuffer, TEXT("通用"), MB_OK  | MB_ICONINFORMATION);

    return 0;
}

2.1.4    Windows 中的数据结构

Windows 中含有很各种数据结构类型,在分歧种类的 API
中会使用到区其余数据结构,由于数据结构的数码过多,将在一而再章节具体的实例中介绍完毕种种效应所选用的数据结构。数据结构常常会作为一些
API 的参数输入。

typedef struct _WIN32_FILE_ATTRIBUTE_DATA{
DWORD    dwFileAttributes;
FILETIME  ftCreationTime;
FILETIME  ftLastAccessTime;
FILETIME  ftLastWriteTime;
DWORD    nFileSizeHigh;
DWORD    nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA,*LPWIN32_FILE_ATTRIBUTE_DATA;

 

相当于:

typedef struct _WIN32_FILE_ATTRIBUTE_DATA{
DWORD    dwFileAttributes;
FILETIME  ftCreationTime;
FILETIME  ftLastAccessTime;
FILETIME  ftLastWriteTime;
DWORD    nFileSizeHigh;
DWORD    nFileSizeLow;
};
typedef _WIN32_FILE_ATTRIBUTE_DATA WIN32_FILE_ATTRIBUTE_DATA;
typedef _WIN32_FILE_ATTRIBUTE_DATA *LPWIN32_FILE_ATTRIBUTE_DATA;

 

Windows SDK 中,结构体也有和好的命名规范。一般景色下,Windows
系统中动用全大写来命名结构体、共用体,并采用“_”来分隔单词,在布局名加“LP”或“P”表示针对数据结构的指针。

证实, WinMain函数的调用规则为”__stdcall”方式,
对于”__stdcall”调用规则, 今后权且先不去追究, 知道有这么回事就行,
以往会详细询问到的, 今后如若深究”__stdcall”就离开了那篇博文的宗旨。

INT param = 0;//参数个数

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图