天天看点

VC++匈牙利命名法

    匈牙利命名法是一种编程时的命名规范。基本原则是:变量名=属性+类型+对象描述。其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。目前在Windows程序开发和MFC程序开发中常用的命名规则是匈牙利命名法。下面就是HN命名法的一般规则。

1.属性部分 

全局变量g_ 

const常量 c_ 

c++类成员变量m_ 

静态变量s_ 

2.类型部分 

指针p 

函数fn 

无效v 

句柄h 

长整型l 

布尔b 

浮点型(有时也指文件)f 

双字dw 

字符串sz 

短整型n 

双精度浮点d 

计数c(通常用cnt) 

字符ch(通常用c) 

整型i(通常用n) 

字节by 

字w 

实型r 

无符号u 

2.描述部分 

最大Max 

最小Min 

初始化Init 

临时变量T(或Temp) 

源对象Src 

目的对象Dest 

这里顺便写几个例子: 

(1) hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄; 

(2) pfnEatApple : pfn 是类型描述,表示指向函数的指针, EatApple 是变量对象描述,所以它表示 

指向 EatApple 函数的函数指针变量。 

(3) g_cch : g_ 是属性描述,表示全局变量,c 和 ch 分别是计数类型和字符类型,一起表示变量类 

型,这里忽略了对象描述,所以它表示一个对字符进行计数的全局变量。 

小结:匈牙利命名法 

1.MFC、句柄、控件及结构的命名规范Windows类型 样本变量 MFC类 样本变量 

HWND hWnd;CWnd* pWnd; 

HDLG hDlg;CDialog* pDlg; 

HDC hDC;CDC* pDC; 

HGDIOBJ hGdiObj;CGdiObject* pGdiObj; 

HPEN hPen;CPen* pPen; 

HBRUSH hBrush;CBrush* pBrush; 

HFONT hFont;CFont* pFont; 

HBITMAP hBitmap;CBitmap* pBitmap; 

HPALETTE hPaltte;CPalette* pPalette; 

HRGN hRgn;CRgn* pRgn; 

HMENU hMenu;CMenu* pMenu; 

HWND hCtl;CState* pState; 

HWND hCtl;CButton* pButton; 

HWND hCtl;CEdit* pEdit; 

HWND hCtl;CListBox* pListBox; 

HWND hCtl;CComboBox* pComboBox; 

HWND hCtl;CScrollBar* pScrollBar; 

HSZ hszStr;CString pStr; 

POINT pt;CPoint pt; 

SIZE size;CSize size; 

RECT rect;CRect rect; 

2.一般前缀命名规范前缀 类型 实例 

C 类或结构 CDocument,CPrintInfo 

m_ 成员变量 m_pDoc,m_nCustomers 

3.变量命名规范前缀 类型 描述 实例 

chchar 8位字符 chGrade 

chTCHAR 如果_UNICODE定义,则为16位字符 chName 

bBOOL 布尔值 bEnable 

nint 整型(其大小依赖于操作系统) nLength 

nUINT无符号值(其大小依赖于操作系统) nHeight 

wWORD 16位无符号值 wPos 

lLONG 32位有符号整型 lOffset 

dwDWORD 32位无符号整型 dwRange 

p* 指针 pDoc 

lpFAR* 远指针 lpszName 

lpszLPSTR 32位字符串指针 lpszName 

lpszLPCSTR 32位常量字符串指针 lpszName 

lpszLPCTSTR 如果_UNICODE定义,则为32位常量字符串指针 lpszName 

hhandle Windows对象句柄 hWnd 

lpfncallback 指向CALLBACK函数的远指针 

4.资源类型命名规范前缀 符号类型 实例 范围 

IDR_不同类型的多个资源共享标识IDR_MAIINFRAME 1~0x6FFF 

IDD_对话框资源IDD_SPELL_CHECK 1~0x6FFF 

HIDD_对话框资源的Help上下文HIDD_SPELL_CHECK 0x20001~0x26FF 

IDB_位图资源IDB_COMPANY_LOGO 1~0x6FFF 

IDC_光标资源IDC_PENCIL 1~0x6FFF 

IDI_图标资源IDI_NOTEPAD 1~0x6FFF 

ID_来自菜单项或工具栏的命令ID_TOOLS_SPELLING 0x8000~0xDFFF 

HID_命令Help上下文HID_TOOLS_SPELLING 0x18000~0x1DFFF 

IDP_消息框提示IDP_INVALID_PARTNO 8~0xDEEF 

HIDP_消息框Help上下文HIDP_INVALID_PARTNO 0x30008~0x3DEFF 

IDS_串资源IDS_COPYRIGHT 1~0x7EEF 

IDC_对话框内的控件IDC_RECALC 8~0xDEEF 

5.Microsoft MFC宏命名规范名称 类型 

_AFXDLL唯一的动态连接库(Dynamic Link Library,DLL)版本 

_ALPHA仅编译DEC Alpha处理器 

_DEBUG包括诊断的调试版本 

_MBCS编译多字节字符集 

_UNICODE在一个应用程序中打开Unicode 

AFXAPIMFC提供的函数 

CALLBACK通过指针回调的函数 

6.库标识符命名法标识符 值和含义 

uANSI(N)或Unicode(U) 

d调试或发行:D = 调试;忽略标识符为发行。 

7.静态库版本命名规范库 描述 

NAFXCWD.LIB调试版本:MFC静态连接库 

NAFXCW.LIB发行版本:MFC静态连接库 

UAFXCWD.LIB调试版本:具有Unicode支持的MFC静态连接库 

UAFXCW.LIB发行版本:具有Unicode支持的MFC静态连接库 

8.动态连接库命名规范名称 类型 

_AFXDLL唯一的动态连接库(DLL)版本 

WINAPIWindows所提供的函数 

9.Windows.h中新的命名规范类型 定义描述 

WINAPI使用在API声明中的FAR PASCAL位置,如果正在编写一个具有导出API人口点的DLL,则可以在自己的API中使用该类型 

CALLBACK使用在应用程序回调函数,如窗口和对话框过程中的FAR PASCAL的位置 

LPCSTR与LPSTR相同,只是LPCSTR用于只读串指针,其定义类似(const char FAR*) 

UINT可移植的无符号整型类型,它是unsigned int的同义词 

LRESULT窗口程序返回值的类型 

LPARAM声明lParam所使用的类型,lParam是窗口程序的第四个参数 

WPARAM声明wParam所使用的类型,wParam是窗口程序的第三个参数 

LPVOID一般指针类型,与(void *)相同,可以用来代替LPSTR