您的位置:首页 > 其它

WndProc函数的用法 结构 句柄 前缀的用法

2012-10-09 09:59 239 查看
WndProc :

用于WndProc的第二个参数的UINT数据型态只是一个unsigned int (无正负号整数) ,在Windows 98中,这是一个32位的值。用于WinMain的第三个参数的PSTR数据型态是指向一个字符串的指针,即是一个char *。 其它数据型态的含义不太明显。例如,WndProc的第三和第四个参数分别被定义为WPARAM和LPARAM,这些名字的来源有点历史背景:当Windows还是16位系统时,WndProc的第三个参数被定义为一个WORD,这是一个16位的
无正负号短(unsigned short)整数,而第四个参数被定义为一个LONG,这是一个32位有正负号长整数,从而导致了文字「PARAM」前面加上了前置前缀「W」和「L」 。当然,在32位的Windows中,WPARAM被定义为一个UINT,而LPARAM被定义为一个LONG(这就是C中的long整数型态),因此窗口消息处理程序的这两个参数都是32位的值。这也许有点奇怪,因为WORD数据型态在Windows98中仍然被定义为一种16位的 无正负号整数,因此「PARAM」前的「W」就有点误用了。

WndProc函数传回一个型态为LRESULT的值,该值简单地被定义为一个LONG。 WinMain函数被指定了一个WINAPI型态(在表头文件中定义的所有Windows函数都被指定这种型态) ,而WndProc函数被指定一个CALLBACK型态。这两个标识符都被定义为_stdcall,表示在Windows本身和使用者的应用程序之间发生的函数呼叫的呼叫参数传递方式。

HELLOWIN还使用了Windows表头文件中定义的四种数据结构 (我们将在本章稍后加以讨论)。这些数据结构如表所示。

结构 含义

MSG 消息结构

WNDCLASS 窗口类别结构

PAINTSTRUCT 绘图结构

RECT 矩形结构

前面两个数据结构在WinMain中使用,分别定义了两个名为msg和wndclass的结构,后面两个数据结构在WndProc中使用,分别定义了ps和rect结构。

句柄简介

最后,还有三个大写标识符,用于不同型态的「句柄」:

标识符 含义

HINSTANCE 执行实体(程序自身)句柄

HWND 窗口句柄

HDC 设备内容句柄

句柄在Windows中使用非常频繁。在本章结束之前,我们将遇到HICON(图标句柄) 、HCURSOR(鼠标光标句柄)和HBRUSH(画刷句柄) 。

句柄是一个(通常为32位的)整数,它代表一个对象。Windows中的句柄类似传统C或者MS-DOS程序设计中使用的文件句柄。程序几乎总是通过呼叫Windows函数取得句柄。程序在其它Windows函数中使用这个句柄,以使用它代表的对象。代号的实际值对程序来说是无关紧要的。但是,向您的程序提供代号的Windows模块知道如何利用它来使用相对应的对象。

经常用到的变量前缀

前缀 数据型态

c char或WCHAR或TCHAR

by BYTE (无正负号字符)

n short

i int

x, y int分别用作x坐标和y坐标

cx, cy int分别用作x长度和y长度;C代表「计数器」

b或f BOOL (int);f代表「旗标」

w WORD (无正负号短整数)

l LONG (长整数)

dw DWORD (无正负号长整数)

fn function(函数)

s string(字符串)

sz 以字节值0结尾的字符串

h 句柄

p 指标

其中的lpfn前缀代表「指向函数的长指标」 。(在Win32 API中, 长指标和短指标(或者近程指标)没有区别。 这只是16位Windows的遗物。 )cb前缀代表「字节数」而且通常作为一个常数来表示一个字节的大小。h前缀是一个句柄,而hbr前缀代表「一个画刷的代号」 。lpsz前缀代表「指向以0结尾字符串的指针」 。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: