博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
讲解sdk学习过程中碰到的windows.h(转)
阅读量:4148 次
发布时间:2019-05-25

本文共 3280 字,大约阅读时间需要 10 分钟。

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

昨天开始学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等都是句柄。

 

 

 

转载地址:http://phsti.baihongyu.com/

你可能感兴趣的文章
k8s web终端连接工具
查看>>
手绘VS码绘(一):静态图绘制(码绘使用P5.js)
查看>>
手绘VS码绘(二):动态图绘制(码绘使用Processing)
查看>>
基于P5.js的“绘画系统”
查看>>
《达芬奇的人生密码》观后感
查看>>
论文翻译:《一个包容性设计的具体例子:聋人导向可访问性》
查看>>
基于“分形”编写的交互应用
查看>>
《融入动画技术的交互应用》主题博文推荐
查看>>
链睿和家乐福合作推出下一代零售业隐私保护技术
查看>>
Unifrax宣布新建SiFAB™生产线
查看>>
艾默生纪念谷轮™在空调和制冷领域的百年创新成就
查看>>
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
异常 Java学习Day_15
查看>>
Mysql初始化的命令
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>