Windows API教程(一) Window API 概要

hello Windows 编程

以下代码可以在 vc6.0 以及vs系列的IDE上运行

#include <windows.h>
int main()
{
    MessageBox(NULL, (LPCSTR)"hello, windows programming", (LPCSTR)"Title", MB_OK);
    return 0;
}

如果提示找不到 windows.h 那么很有可能是你装的不是完整版的vc6.0 亦或者,你用的不是微软的工具(上面列举的都是微软的)

那么,不解释,你懂的。windows这个操作系统本身就是微软公司的,所以如果你想在windows上面做开发的话,首先推荐的是微软自己的 visual studio 系列IDE。如果你是想学习的话推荐使用 visual studio 2012(据说要win7 64位才能装),如果希望你的程序能在一般的电脑上能跑的话,那么避免麻烦还是推荐使用 visual studio 2010 了。(原因本站也有相关博文,有兴趣的可以找找)

Windows 数据类型

想要学习windwos编程,第一步就需要了解 windows 编程所常用的数据类型。 Windows API 中定义了很多 Windows 自己定义的数据类型。对于函数的入口参数、返回值以及一些数据结构等等都使用的是 windows 数据类型,所以这也是一个必不可少的步骤。
如果你对C语言或者C++的数据类型比较熟悉的话,那么对于一些基础的内容这个过程就是慢慢熟悉的过程。

windef.h

typedef int                 INT;       /* 整形 */
typedef unsigned int        UINT;      /* 无符号整形 */
typedef unsigned int        *PUINT;    /* 无符号整形指针 */
typedef int                 BOOL;      /* 布尔类型 */
typedef unsigned char       BYTE;      /* 字节 */
typedef unsigned short      WORD;      /* WORD (无符号短整型) */
typedef unsigned long       DWORD;     /* DOUBLE WORD (无符号长整形)*/
typedef float               FLOAT;     /* 浮点型 */
typedef FLOAT               *PFLOAT;   /* 指向float类型指针 */
typedef BOOL near           *PBOOL;    /* 指向布尔类型指针 */
typedef BOOL far            *LPBOOL;
typedef BYTE near           *PBYTE;    /* 指向字节类型指针 */
typedef BYTE far            *LPBYTE;
typedef int near            *PINT;     /* 整形指针 */
typedef int far             *LPINT;
typedef WORD near           *PWORD;    /* 指向WORD类型的指针 */
typedef WORD far            *LPWORD;
typedef long far            *LPLONG;   /* 指向长整形的指针 */
typedef DWORD near          *PDWORD;   /* 指向DWORD类型的指针 */
typedef DWORD far           *LPDWORD;
typedef void far            *LPVOID;   /* 指向void类型的指针 */
typedef CONST void far      *LPCVOID;  /* 指向void类型的常指针 */

简单说下,大部分类型都没有什么离奇的地方,可能很多人会对那个far和near觉得有疑问,实际上F12查看定义会发现他们就定义上方

#define far
#define near

看到这里你是否还是有疑问?那么博主这里直接说了,这个 far 和 near 只是用来标识变量的新旧的(预处理阶段far和near会被替换成空字符串)。 例如 PINTLPINT 实际上都是 int * 只不过一个是老式写法,一个是新式写法,这都是为了兼容问题。

那么,简单的看下这些数据类型,其实可以总结法相但凡是以 “P” 开头的都是指针(pointer)类型(”LP”是老式写法)。撇开这些不谈,那么实际上这些 Windows API 常用的一些数据结构跟我们原本所学的 C/C++ 变量差别就是一个 typedef 而已,基础好的熟悉一下就行了。不过,也不要想得这么简单,windows编程还有一些比较复杂的类型比如 HWND、HANDLE 等等。

在碰到不熟悉的类型时请熟练的使用 “右键转到定义” 或者 F12。 大家不用 太过害怕这些复杂的类型名称,Windows 数据类型 并不是内建的数据类型类型,而都是从 C 类型重定义得到的。

那么我们可以看下本节最开始的例子中所用的到的API函数,MessageBox的定义:

/* 消息盒子 */
int MessageBoxA(
  HWND hWnd ,         /* 句柄 */
  LPCSTR lpText,      /* 内容 */
  LPCSTR lpCaption,   /* 标题 */
  UINT uType          /* 类型 */
);

其中的类型你是否能理解其原本的面目呢,那么博主这里也不废话,就只有HWND这个类型还未有专门介绍,但是大家也可以先去搜索一下,是一种“句柄”类型 ( 百科链接 )

Windows 数据类型名命名的规律

  • 无符号类型:一般是以“U”开头,比如“INT”对应的“UINT”。
  • 指针类型:其指向的数据类型前加“LP”或“P”,比如指向 DWORD
  • 的指针类型为“LPDWORD”和“PDWORD”。

  • 句柄类型:以“H”开头。比如,HWND 是window(WND简写)也就是窗口的句柄,菜单(MENU)类型对应的句柄类型为 “HMENU” 等等。

博文整理中…

催稿请 @Lellansin 或发邮件 lellansin@gmail.com。。

下一讲:windows 编程之路(二) 句柄与内核

Advertisements

3 thoughts on “Windows API教程(一) Window API 概要

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s