第二章 Windows窗口设计

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二章:WIN32 窗体程序设计

学习目标

⏹Win32编程中需要掌握的一些重要概念

⏹详解Win32程序

⏹理解Win32程序的消息机制

⏹Win32程序对鼠标和键盘的控制

Win32编程中需要掌握的一些重要概念

学习windows编程是一个比较难的过程,主要的障碍是因为windows程序中很多新的东西,我们一下子不能适应,下面我们就来扫清这些障碍:

我们在上一章中看到了一个简单的windows程序,大家会发现windows 程序中有很多全大写定义的东西,这就是我们的障碍之一,因为,太多的东西我们以前没有见过,windows程序中全大写的东西可以分为这样三种:

第一种是:windows定义的变量

比如这句:

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )

这是一个方法的定义,这和我们以前的程序就有太多的不同。下面的列表是从相应windows的头文件中摘下来的,看完这个后,你是否可以理解上面这句话的意思。

#define FAR far

#define NEAR near

#define CONST const

#define CALLBACK __stdcall

#define WINAPI __stdcall

#define WINAPIV __cdecl

#define APIENTRY WINAPI

#define APIPRIVATE __stdcall

#define PASCAL __stdcall

typedef unsigned long DWORD;

typedef int BOOL;

typedef unsigned char BYTE;

typedef unsigned short WORD;

typedef float FLOAT;

typedef FLOAT *PFLOAT;

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;

typedef WORD far *LPWORD;

typedef long far *LPLONG;

typedef DWORD near *PDWORD;

typedef DWORD far *LPDWORD;

typedef void far *LPVOID;

typedef CONST void far *LPCVOID;

typedef int INT;

typedef unsigned int UINT;

typedef unsigned int *PUINT;

typedef UINT WPARAM;

typedef LONG LPARAM;

typedef LONG LRESULT;

其实,windows程序把很多变量进行了重新定义,还记得typedef这个类型定义关键字吧!其实上面的UINT、WPARAM、LPARAM,其实都是unsigned int(无符号整数),其实HWND也是无符号整数,后面我们详细介绍HWND,

今后,如果大家见到了一个类型是全大写的,那么它一定是在windows的头文件中重新定义了。

还有就是:LRESULT CALLBACK,从上面的表中,大家可以看到他们是返回类型和宏定义,其中,LRESULT是long,而CALLBACK是函数的调用方式__stdcall。

第二种是windows的宏定义:

在前面,大家看到了__stdcall是一个宏定义,在windows程序中有大量的宏定义,宏定义用于这样几个地方:

◆常量

所有的消息都是常量,比如前面看到的 WM_KEYDOWN、WM_PAINT等,所有的键盘标识,如VK_ESCAPE,还有就是我们在函数调用中用到的一些参数:如WS_OVERLAPPEDWINDOW, WHITE_BRUSH、IDI_APPLICATION等都是常量

◆简单函数用宏

如:

#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)) 以上的都是简单的函数,如LOWORD是表示取一个DWORD(32位整数)的低16位,而HIWORD取高16位

◆程序结构中用到宏,今后,我们要学习的消息映射中的

BEGIN_MESSAGE_MAP、DECLARE_MESSAGE_MAP等就是在程序结构中用到的宏。

第三中是windows中的结构:

windows程序中大量使用结构,对这些结构的掌握程度,可以作为衡量一个程序员对windows程序的熟悉程度,windows程序的结构难,而且结构

中的成员非常多,是我们学习的难点。在上一章的程序中,我们看到的结构有:WNDCLASS、MSG等,学习中,大家应该掌握这些常用结构的常用成员的用法,我们来看看这两个结构

typedef struct tagWNDCLASSA {

UINT style;

WNDPROC lpfnWndProc;

int cbClsExtra;

int cbWndExtra;

HINSTANCE hInstance;

HICON hIcon;

HCURSOR hCursor;

HBRUSH hbrBackground;

LPCSTR lpszMenuName;

LPCSTR lpszClassName;

} WNDCLASSA;

typedef struct tagMSG {

HWND hwnd;

UINT message;

WPARAM wParam;

LPARAM lParam;

DWORD time;

相关文档
最新文档