程序员的内涵之基于SDK的Windows应用程序框架代码详解

本文详细介绍了基于SDK的Windows应用程序框架,强调了必须包含windows.h头文件以及声明窗口过程函数的重要性。文章还深入探讨了常见的Windows数据类型如LRESULT、LONG、BOOL等,并解释了如MAKEWORD、LOWORD和HIWORD等宏的作用。同时,讨论了函数调用约定如CALLBACK和WINAPI,以及窗口过程函数的参数含义。
摘要由CSDN通过智能技术生成

基于SDK的Windows应用程序框架代码需要注意以下几个方面:

1、必须包含头文件windows.h

WINDOWS.H是一个最重要的头文件,它包含了其他Windows头文件,这些头文件的某些也包含了其他头文件。这些头文件中最重要的和最基本的是:

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

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

WINBASE.H Kernel(内核)函数。

WINUSER.H 用户界面函数。

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

这些头文件定义了Windows的所有资料型态、函数调用、资料结构和常数识别字,它们是Windows文件中的一个重要部分。

其实,远不止这些,我们可以打开该文件看一看,如果vc++6.0安装在C盘,那么我们可以在C:\Program Files\Microsoft Visual Studio\VC98\Include目录下打开该文件。当然WINDEF.H等文件也在这个目录下。这个目录下几乎包含了windows开发的所有的头文件。比如网络通信程序开发时所用的WINSOCK.H头文件等。

2、声明窗口过程函数

窗口过程函数声明如下:

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

LRESULT  看上去很奇怪。

其实LRESULT  是在WINDEF.H中定义的,可以在VC++6.0用鼠标选择LRESULT 然后点鼠标右键,查看其定义,定义如下:

typedef LONG LRESULT;

L 的意思是LONG    RESULT  的意思是结果、返回值。加在一起就是返回长整型的意思。

注意:typedef LONG LRESULT; 并不是创建了另一个数据类型,只是给 LONG类型定义了另一个别名。其实,我们会发觉在C或C++中也没有一种数据类型为LONG,只有long类型。如果我们继续用上面提到的方法查看LONG类型的定义,我们会发觉LONG在WINNT.H文件中定义为:

typedef long LONG;

所以,所谓的LRESULT 其实就是long类型。只是他还有另一个名字叫LRESULT。

Windows应用程序为我们定义了很多的这样的数据类型别名。

下面我们详细的介绍一下windows的常用数据类型。

我们查看WINDEF.H文件,可以看到windows为我们定义的一些常用的数据类型及常量如下:

typedef  unsigned long       DWORD;
typedef  int                 BOOL;
typedef  unsigned char       BYTE;
typedef  unsigned short      WORD;
typedef  float               FLOAT;
typedef  FLOAT               *PFLOAT;
typedef  int                 INT;
typedef  unsigned int        UINT;
typedef  unsigned int        *PUINT;
typedef  UINT WPARAM;
typedef  LONG LPARAM;
typedef  LONG LRESULT;
#define  MAKEWORD(a, b)      ((WORD)(((BYTE)(a)) | ((WORD)((BYTE)(b))) << 8))
#define  MAKELONG(a, b)    ((LONG)(((WORD)(a)) | ((DWORD)((WORD)(b))) << 16))
#define  LOWORD(l)           ((WORD)(l))
#define  HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))
#define  LOBYTE(w)           ((BYTE)(w))
#define  HIBYTE(w)           ((BYTE)(((WORD)(w) >> 8) & 0xFF))

可以看到DWORD其实就是一个无符号的长整型的别名,所占内存为4个字节;

typedef  int                 BOOL;

BOOL型其实就是int的别名。所占内存为4个字节。

typedef  float               FLOAT;

FLOAT 就是float类型的别名。请注意:BOOL 与 bool之间的区别,bool为布尔类型,所占内存只有一个字节。再看一个定义:

typedef  FLOAT  *PFLOAT;

有点奇怪吧!我们把它的写的格式变一下:

typedef   FLOAT  *  PFLOAT;

我们发觉PFLOAT 就是FLOAT * 即 float * 也就是浮点数指针。

也就是凡是以字母”P“开头的表示他是一个指针类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

技术小咖龙

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

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

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

打赏作者

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

抵扣说明:

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

余额充值