Windows桌面应用程序(1-2-1-2nd) Windows编码约定

来源:互联网 发布:rpg游戏源码 编辑:程序博客网 时间:2024/06/05 08:47

如果您不熟悉Windows编程,那么在第一次看到Windows程序时可能会感到不安。该代码充满了像DWORD_PTRLPRECT这样的奇怪的类型定义,变量的名字像hWndpwsz(称为匈牙利符号)。学习一些Windows编码习惯是值得花点时间的。
绝大多数Windows API由功能或组件对象模型(COM)接口组成。很少有Windows API作为C++类提供。(一个明显的例外是GDI+,其中一个2D图形API。)
类型定义
Windows头文件包含很多typedef。其中许多是在头文件WinDef.h中定义的。这里有一些你会经常遇到的。
整数类型

数据类型 大小 是否有符号 BYTE 8 bits 无符号 DWORD 32 bits 无符号 INT32 32 bits 有符号 INT64 64 bits 有符号 LONG 32 bits 有符号 LONGLONG 64 bits 有符号 UINT32 32 bits 无符号 UINT64 64 bits 无符号 ULONG 32 bits 无符号 ULONGLONG 64 bits 无符号 WORD 16 bits 无符号

正如你所看到的,这些类型定义有一定的冗余。其中一些重叠是由于Windows API的历史。这里列出的类型具有固定大小,并且在32位和64位应用程序中的大小是相同的。例如,DWORD类型总是32位宽。
布尔类型
BOOL是在布尔上下文中使用的整数值的typedef。头文件WinDef.h也定义了两个用于BOOL的值。

#define FALSE 0 #define TRUE 1

尽管定义了TRUE,但大多数返回BOOL类型的函数都可以返回任何非零值来指示布尔值。因此,你应该总是这样写:

// Right way.BOOL result=SomeFunctionThatReturnsBoolean();if(result){    ...}

而不是这个:

// Wrong!if(result==TRUE){    ...}

请注意,BOOL是一个整数类型,不能与C++ bool类型互换。
指针类型
Windows定义了表单pointer-to-X的许多数据类型。这些名称中通常有前缀P-LP-。例如,LPRECT是指向RECT的指针,其中RECT是描述矩形的结构。以下变量声明是等效的。

RECT *rect;  // Pointer to a RECT structure.LPRECT rect;  // The samePRECT rect;  // Also the same.

历史上,P代表”指针”,LP代表”长指针”。长指针(也称为远指针)是16位Windows的保留,当它们需要处理当前段以外的内存范围时。LP前缀被保留,以便于将16位代码移植到32位Windows。今天没有区别——指针是指针。
指针精度类型
以下数据类型始终是指针的大小——即在32位应用程序中为32位宽,在64位应用程序中为64位。大小是在编译时确定的。当32位应用程序在64位Windows上运行时,这些数据类型仍然是4个字节宽。(64位应用程序无法在32位Windows上运行,所以不会出现相反的情况。)

  • DWORD_PTR
  • INT_PTR
  • LONG_PTR
  • ULONG_PTR
  • UINT_PTR

这些类型用于可能将整型转换为指针的情况。它们也用于定义指针运算的变量,并定义在内存缓冲区中遍历整个字节范围的循环计数器。更一般地说,它们出现在现有的32位值在64位Windows上扩展到64位的地方。
匈牙利符号
匈牙利符号是为变量的名称添加前缀以提供有关变量的附加信息的做法。(这个符号的发明者查尔斯·西蒙尼(Charles Simonyi)是匈牙利人,因此它的名字)。
匈牙利符号以其原始形式给出关于变量的语义信息,告诉您预期的用途。例如,i表示索引,cb表示以字节为单位的大小(“字节数”),而rwcol表示行和列的数字。这些前缀旨在避免在错误的上下文中意外使用变量。例如,如果你看到表达式rwPosition+cbTable,你就会知道一个行号被添加到一个大小,这几乎肯定是代码中的一个错误
匈牙利符号的一个更常见的形式使用前缀来给出类型的信息——例如,dwDWORD,wWORD
如果您在网上搜索”匈牙利符号”,您会发现很多关于匈牙利符号是好还是坏的意见。一些程序员对匈牙利符号极为不满。其他人觉得很有帮助。无论如何,MSDN上的许多代码示例都使用匈牙利符号,但是您不需要记住前缀来理解代码。
下一个
使用字符串


原文链接:Windows Coding Conventions

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大连3d错觉艺术馆 人生三大错觉经典版 哈尔滨3d错觉艺术馆旅游 错觉图片5000张加解释 错觉by蓝淋全文阅读 爱情错觉吉他谱 外滩星空错觉艺术馆 人生的三大错觉是什么意思 爱情错觉半吨 眼泪的错觉下载 缪勒莱耶错觉 错觉摄影工作室 人生三大错觉是什么 人生几大错觉 错觉是什么意思 人类的三大错觉 缪勒莱依尔错觉 眼泪的错觉原唱 新生入学三大错觉 上海外滩星空错觉艺术馆 无尽楼梯视觉错觉图 教你画纸上3d出现错觉 昏暗中有种烈日灼身的错觉 错误 错误651 错误英文 错误的英文 打印机错误 错误691 错误郑愁予 网络错误 错误英语 错误678 错误629 错误 郑愁予 郑愁予错误 错误的 错误 英语 错误 英文 错误的拼音 英语错误