讲解sdk学习过程中碰到的windows.h(转)

来源:互联网 发布:ios2k16库里捏脸数据 编辑:程序博客网 时间:2024/05/16 08:09

先转一些觉得比较有价值的东西过来。呵呵。

昨天开始学sdk,发现里面的命名规则特别的奇怪,因为很早以前在网上看到过关于匈牙利命名法,但时间太长了,什么都忘了,于是又在网上搜了下,发现了这篇文章,感觉能接除不少的疑惑,所以,转贴过来,希望和我一样初学sdk有所帮助

 

3.4 匈牙利命名法和 WINDOWS.H 文件

  在进一步讨论 WinMain 之前,我要离开正题讨论匈牙利命名法和围绕着 WINDOWS.H 的各种文件(比 如 WINDEF.H 文件)。尽管这样安排有点让人讨厌,但如果你希望理解 WinMain 的语法成分,你却需要这些 信息。
  在继续进行之前,我应该介绍一下匈牙利命名法的奇特思想。也就是在变量名前习惯地加一个字母来帮助 标识变量的类型。例如,在 hPrevInstance 中的“h”表示这个 hPrevInstance 是 HINSTANCE 类型或 HANDLE 类型。同样,在 nCmdShow 中的“n”代表它是一个整型量。
  这种习惯在传统 Windows 的各个方面都广泛使用,在 DOS 中也偶尔露面。尽管匈牙利命名法会让一些 新人感到混乱,而且由于 STRICT 选项的出现在某种程度上降低了它的价值,但它仍不失为那些细心、老练 的程序设计人员手中一种有用的工具。

  附注:
  有关匈牙利命名法的一点有意思的说明是它的名字的由来。这种命名技术是由一位能干的 Microsoft 程 序员 Charles Simonyi 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教会使用这 种约定。这对他们来说一切都很正常。但对那些 Simonyi 领导的项目组之外的人来说却感到很奇特,他们认 为这是死板的表达方式,甚至说代有这样奇怪的外观是因为它是用匈牙利文写的。从此这种命名方式就被叫做 匈牙利命名法。

  我使用匈牙利命名法是因为它现在已经成为 Windows 编码传统的一种固定部分了。不过我让你自己来判 断它是否有魅力。
  下面列出匈牙利命名法中常用的小写字母的前缀(表3.1):


  表3.1  WINDOWS.H 和/或 WNIDEF.H 中的 Windows 的类型定义


--------------------------------------------------------------------------------

前  缀  &line;     类  型            &line;    Windows 类型


--------------------------------------------------------------------------------

b(或f)     &line;    整型                     &line;     BOOL
    by(或b)    &line;    无符号字符               &line;     BYTE
    c          &line;    字符                     &line;
    dw         &line;    无符号长整型             &line;     DWORD
    fn         &line;    函数                     &line;
    h          &line;    无符号整型(UINT)       &line;     HANDLE
    i          &line;    整型                     &line;
    l          &line;    长整型                   &line;     LONG
    lp         &line;    长指针                   &line;
    n          &line;    整型或短整型             &line;
    s          &line;    字符串型                 &line;
    sz         &line;    以null做结尾的字符串型   &line;
    w          &line;    整型或短整型             &line;     WORD


--------------------------------------------------------------------------------

  注意上表的第三列,它列出了在 Windows 程序中常常要用到的各种新类型。这些类型存在的理由与 HINSTANCE 类型存在的理由是一样的。不要被 Windows 代码的这些外观弄糊涂,这点小玩意儿或者说困难 其实没什么,对它们的最简单的具体认识应该是,它们只不过是 C 程序员用了多年的旧类型换了新名字而已。 若定义了 STRICT,它们常常转换为指针类型。例如,如果没有定义 STRICT。HINSTANCE 说明为 DWORD, 而定义了 STRICT 之后,它就被说明为指向一个结构的指针。如果定义 STRICT,HINSTANCE 指针类型就会 由编译程序进行细致的类型检查,这样有助于你写出清晰的可转换的代码。
  所有引用手册的最终来源是 WINDOWS.H 和在它当中引用的文件。在每个 Windows 程序的开头都会引用 WINDOWS.H 文件。在 WINDOWS.H 内部或在它引用的一个文件中,你会发现很多函数和类型的说明和定义来 自 Windows 环境。下列是特别重要的代码分支,包含一些方便使用的定义:


/** Simple types & common helper macros **/

typedef int                     BOOL;
#define FALSE                   0
#define TRUE                    1

typedef unsigned char           BYTE;
typedef unsigned short          WORD;
typedef unsigned long           DWORD;

typedef unsigned int            UINT;

#if define STRICT
typedef signed long             LONG;
#else
#define LONG long

#define LOBYTE(w)               ((BYTE)(w))
#define HIBYTE(w)               ((BYTE)((UINT)(w)>>8))

#define LOWORD(l)               ((WORD)(l))
#define HIWORD(l)               ((WORD)((UINT)(l)>>16))

  花一些时间仔细研究一下这些代码能帮你搞清楚很多 Windows 程序设计中有趣的外貌。
  有关匈牙利命名法和 WINDOWS.H 的难以理解的题外话就到此为止。围绕着 WINDOWS.H 的文件复合体正 是解释着许多难点的地方,花几个小时对这些文件内容研究一番是值得的。

 返回目录

 


--------------------------------------------------------------------------------

Created by nyhyb         --- 原著:Charles Calvert (美) ---


 
补充:

 

首先会有一个#include <windows.h> ,嗯,没什么奇怪的,这和#inclde <stdio.h>没什么两样。然后是一个函数声明:LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ; 有点困惑了,一下子就出来了好几个“生词”,而且函数名前面有两个修饰符也是以前没有遇到的。好在我们还可以辨认出这是一个函数声明。再忘下看是WinMain函数,又是一堆生词,我猜想你可能已经开始郁闷了。想一遍看懂这个程序确实困难,所以看不懂也没关系。看不下去了可以看看书上的讲解。这篇文章并不是要完整分析这个程序的,hfire不可能有petzold讲的好。在这里hfire帮你分析一下一些陌生的东西。
  首先说Windows的数据类型。尽管这些数据类型看上去很陌生,其实它们是由C的基本数据类型define的。比如UINT就是unsinged int,PSTR就是pointer to string 的意思,猜猜就知道是char * 。Windows还有很多系统定义的结构体,比如WNDCLASS,MSG等,这些东西见的多了就自然明白了。Windows还有一个重要的概念,句柄。通过句柄就可以操作Windows对象。HWND,HINSTANCE,HDC等都是句柄。

 

 

 

原创粉丝点击