"匈牙利"命名法

MFC、句柄、控件及結構的命名規範 --------轉
Windows類型樣本變量MFC類樣本變量
HWNDhWnd;CWnd*pWnd;
HDLGhDlg;CDialog*pDlg;
HDChDC;CDC*pDC;
HGDIOBJhGdiObj;CGdiObject*pGdiObj;
HPENhPen;CPen*pPen;
HBRUSHhBrush;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;

一般前綴命名規範

前綴類型實例
C類或結構CDocument,CPrintInfo
m_成員變量m_pDoc,m_nCustomers

變量命名規範

前綴類型描述實例chchar8位字符chGradech TCHAR如果_UNICODE定義,則爲16位字符chNamebBOOL布爾值bEnablen int整型(其大小依賴於操作系統)nLengthn UINT 無符號值(其大小依賴於操作系統)nHeightw WORD 16位無符號值wPosl LONG 32位有符號整型lOffsetdw DWORD 32位無符號整型 dwRangep * 指針pDoclp FAR* 遠指針 lpszNamelpsz LPSTR 32位字符串指針lpszNamelpsz LPCSTR 32位常量字符串指針lpszNamelpsz LPCTSTR 如果_UNICODE定義,則爲32位常量字符串指針lpszNameh handle Windows對象句柄hWndlpfn callback指向CALLBACK函數的遠指針

應用程序符號命名規範

前綴符號類型實例範圍IDR_ 不同類型的多個資源共享標識IDR_MAIINFRAME1~0x6FFFIDD_對話框資源IDD_SPELL_CHECK 1~0x6FFFHIDD_對話框資源的Help上下文HIDD_SPELL_CHECK 0x20001~0x26FFIDB_ 位圖資源IDB_COMPANY_LOGO 1~0x6FFFIDC_光標資源IDC_PENCIL 1~0x6FFFIDI_圖標資源IDI_NOTEPAD 1~0x6FFFID_來自菜單項或工具欄的命令ID_TOOLS_SPELLING 0x8000~0xDFFFHID_命令Help上下文HID_TOOLS_SPELLING 0x18000~0x1DFFFIDP_消息框提示IDP_INVALID_PARTNO 8~0xDEEFHIDP_消息框Help上下文HIDP_INVALID_PARTNO 0x30008~0x3DEFFIDS_串資源IDS_COPYRIGHT 1~0x7EEFIDC_對話框內的控件IDC_RECALC 8~0xDEEF

應用程序符號命名規範

前綴符號類型實例範圍
IDR_ 不同類型的多個資源共享標識IDR_MAIINFRAME1~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

應用程序符號命名規範

前綴符號類型實例範圍
IDR_ 不同類型的多個資源共享標識IDR_MAIINFRAME1~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
前綴符號類型實例範圍
IDR_ 不同類型的多個資源共享標識IDR_MAIINFRAME1~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

Microsoft MFC宏命名規範

名稱類型
_AFXDLL唯一的動態連接庫(Dynamic Link Library,DLL)版本
_ALPHA僅編譯DEC Alpha處理器
_DEBUG包括診斷的調試版本
_MBCS編譯多字節字符集
_UNICODE在一個應用程序中打開Unicode
AFXAPI MFC提供的函數
CALLBACK通過指針回調的函數

庫標識符命名法

標識符值和含義
u ANSI(N)或Unicode(U)
d 調試或發行:D = 調試;忽略標識符爲發行。

靜態庫版本命名規範

描述
NAFXCWD.LIB調試版本:MFC靜態連接庫
NAFXCW.LIB發行版本:MFC靜態連接庫
UAFXCWD.LIB調試版本:具有Unicode支持的MFC靜態連接庫
UAFXCW.LIB發行版本:具有Unicode支持的MFC靜態連接庫

動態連接庫命名規範

名稱類型
_AFXDLL唯一的動態連接庫(DLL)版本
WINAPI Windows所提供的函數

Windows.h中新的命名規範

類型定義描述
WINAPI使用在API聲明中的FAR PASCAL位置,如果正在編寫一個具有導出API人口點的DLL,則可以在自己的API中使用該類型
CALLBACK使用在應用程序回叫例程,如窗口和對話框過程中的FAR PASCAL的位置
LPCSTR與LPSTR相同,只是LPCSTR用於只讀串指針,其定義類似(const char FAR*)
UINT可移植的無符號整型類型,其大小由主機環境決定(對於Windows NT和Windows 9x爲32位);它是unsigned int的同義詞
LRESULT窗口程序返回值的類型
LPARAM聲明lParam所使用的類型,lParam是窗口程序的第四個參數
WPARAM聲明wParam所使用的類型,wParam是窗口程序的第三個參數
LPVOID一般指針類型,與(void *)相同,可以用來代替LPSTR
以下來自文檔收藏

1.1     構造匈牙利名稱

一個通常的匈牙利名稱由一個或者多個前綴prefix)、一個基本標識base tag)和一個修飾符qualifier)拼接而成。基本標識指示了變量的類型(如"co"代表color),前綴修正該類型(如"rg"表示數組,那麼"rgco"就表示顏色數組),修飾符描述了該特定類型的應用(如"rgcoGray"表示用作灰度的顏色數組)。並非所有名字都會使用全部組成元素,前綴往往是不需要的,而當類型的應用是顯而易見的時候,比如當代碼中只包含一個相關類型時,修飾符也可以省略。

值得提醒的是:許多(也許絕大部分)基本標識和修飾符將是應用程序相關的,因爲它們被用於表示應用程序定義的類型和應用。雖然我們已經爲一些基本類型定義了標準標識(下面將列出其中一部分),但是在更適於使用抽象類型的場合下使用這些標準標識是錯誤的。例如,如果一個color恰好是用long來實現的,那麼有人可能會用"rgl"來標識一個顏色數組,但是這樣將破壞對color的抽象。

當匈牙利命名法用於函數名稱時,修飾符通常僅僅標識了函數的動作。有時在基本標識符後添加描述函數參數的匈牙利類型會很有用。當然,函數名的首字母一定要大寫。例如"FInitFooFromHwndXY"應當是一個函數的名字,該函數將使用類型爲HwndXY的參數來初始化一個"foo"結構,並且返回一個Boolean成功代碼。這種做法並非強制性的,只有當這樣做會讓函數名更易於理解才這樣做。

1.2     標準基本標識

下面的表中給出了基本類型的標準基本標識。如上所述,應用程序將爲其內部類型定義許多自己的標識。

f

標誌(BOOL)。取值爲TRUE或者FALSE。修飾符應當描述何時該標誌爲TRUE,例如fError表示當錯誤發生時變量爲TRUE

ch

單字節字符(CHAR)

sz

0結尾的CHAR型字符串(經典的C字符串)。有時可以描述字符串的最大長度,如"sz255"表示實際的字符串體可以容納255個字符,因此必需分配256個字符。

st

帶長度前綴的CHAR型字符串。這種字符串長度不超過255個字符,因爲其長度必須存放在一個字節中。如同sz一樣,可以用"st32"來表示字符串最大長度爲32,因此需要分配33個字符空間來存放字符及其長度。

stz

帶長度前綴同時也以0結尾的CHAR型字符串。注意如果在名稱中描述了長度length,那麼至少要分配length+2CHAR

chw, wt, wz, wtz

chszststz的寬字符(WCHAR)版本。所有最終用戶可見的字符串都必須使用寬字符串(UNICODE)

fn

函數。通常和"p"前綴(見下)連用成爲"pfn",因爲在C中只能將函數地址存放在變量中。

b

一個BYTE

w

一個16位的無符號數量值(WORD, SHORT, or USHORT)

dw

一個32位的無符號雙字(DWORD)

l

一個LONG (有符號32位數量值).

u

一個無符號長整型數(ULONG)。在經典的匈牙利命名法中,這代表一個無符號word,在Office中,這代表一個無符號32位數量值,與"dw"相同,但是當類型是數值時更傾向用"u"標識(和ULONG類型)。

v

Void類型。總是和"p"連用構成"pv",標識指向未知類型的指針。

sc

OLE SCODE

hr

OLE HRESULT

var

OLE VARIANT

varg

OLE VARIANTARG

1.3     標準前綴

下面表中給出了用於修飾基本標識類型的標準前綴。可以使用一個或者多個前綴。應用程序有可能(但是可能很罕見)需要定義自己的前綴(典型情況是一個應用程序將只定義基本標識和修飾符)。

p

指針。例如"pch"標識指向一個字符的指針,在經典的微軟匈牙利命名法中,"p"代表near pointer,相應地,"lp""hp"用於表示long (far) pointerhuge pointer。在32位世界裏,這不再是個問題了。

rg

數組("range"變來)。例如"rgch"表示字符數組。同C/C++用法一樣,這可以是一個分配好的數組的名字,也可以是指向數組的指針的名字。

i

基本類型數組的索引。例如"ich"表示字符數組的索引。

c

基本類型項目的總數。例如"cch"表示字符總數。

n

另一種表示某基本類型項目的總數的前綴(表示"number of"),但是最好用"c"

d

某基本類型值的差值,例如"dx"表示兩個類型爲x的值的差。

h

句柄。一個到不能被用戶間接訪問的某基本類型項目的非透明引用(過去使用此定義是因爲對可移動內存塊有不同用法)。例如"hwnd"是到窗口("wnd")的句柄,因爲句柄不在你的地址空間中,所以不允許你間接訪問窗口結構中的域(這樣還保持了非透明引用的抽象性)。一個應用程序模塊應當引出指向抽象數據類型的句柄(典型地應當定義爲void *),這樣客戶就只能使用此引用而絕對不能看到其中的數據域。然而在C++中,由於可以通過私有數據成員來引出指向類對象的指針,因此這樣做已經不那麼必要了。

pl

”對象(A “plex” of objects)。這是簡單數組(”rg”)之外的另一種選擇,表示了使用plex抽象以標準方式可變的數組(參見inc/msoalloc.h)。

mp

用於將索引或者其它標量映射到值的數組。此前綴後面要加上索引和值的標識,如"mpchdx"表示將字符值(作爲數組索引)映射到該字符對應的dx值上的數組。

V

全局變量,總是第一個前綴。

 

除此之外,我們還可以在合適的時候添加下面的一些前綴到任何匈牙利命名前綴之前:

m_

C++類的數據成員。

s_

C++類的靜態數據成員。

Mso

引出的全局函數。

MSO

引出的自定義類型。

mso

引出的全局常量或者全局變量。

1.4     標準修飾符

大部分修飾符都按照該名字被使用的場合來定義,但是還是有一些預定義的標準修飾符如下:

First

集合中的第一個元素或者第一個感興趣的元素(如pchFirst

Last

集合中的最後一個原始或者最後一個感興趣的元素(如pchLast)。當用作索引時,Last表示最後一個合法的/期望的值,因此循環可以如下定義:
for (ich = ichFirst; ich <= ichLast; ich++)

Lim

集合中元素的上限。與Last不同,Lim不表示合法值,Lim是最後一個合法值加1,因此循環可以如下定義:
for (ich = ichFirst; ich < ichLim; ich++)

Min

集合中的最小元素,類似於First,但是通常表示第一個合法值,而不僅僅是第一個要處理的值。

Max

集合中元素的上限(和Lim一樣)。不幸的是,"Max"的正常英語讀法通常暗示了最後一個合法值,但是Max修飾符不表示合法值,而是合法值加1。和Lim一樣,Max的典型用法如下:

for (ich = ichMin; ich < ichMax; ich++)
Max的使用一定要非常小心。

Mac

類似於Max,但是有時用於 當前 最大值會隨着時間而改變的情況下。注意Mac也是最後一個合法值加1

Mic

類似於Min,但有時用於“ 當前 最小值會隨着時間而改變的情況下。

T

臨時值。此修飾符可能被作爲避免創建新的好名字的一種方法而被濫用,但是有時將其用於聲明簡單的臨時值是適合的,如在經典的swap操作中那樣。

TT, T3,等等

在需要更多唯一名字的時候對 T = temporary 約定的進一步濫用。應當完全避免。

Sav

用於保存值的臨時值,以便將來恢復。例如:
hwndSav = hwnd; ...; hwnd = hwndSav;

Null

特定的0值。雖然總是等於0,但是可用於文檔化的目的(如hwndNull)。

Nil

特定的非法值,不必要等於0(可能是-1或者任何其它值)。爲了避免混淆,最好不要爲同一類型同時定義NullNil值。

Src

操作源,典型地用法是和Dest配套使用,如:

*pchDest = *pchSrc

Dest

操作目的,參見Src

 

 



在VB中使用匈牙利命名法的時候情況略微特殊
由於VB時不區分大小寫的,所以採用有意義的命名規則應該更加有意義。

本文引用通告地址: http://blog.csdn.net/lionhearter/services/trackbacks/183533.aspx

a       Array                                 數組

  b       BOOL (int)                            布爾(整數)

  by      Unsigned Char (Byte)                  無符號字符(字節)

  c       Char                                  字符(字節)

  cb      Count of bytes                        字節數

  cr      Color reference value                 顏色(參考)

  cx      Count of x (Short)                    x的集合(短整數)

  dw      DWORD   (unsigned long)                 雙字(無符號長整數)

  f       Flags   (usually multiple bit values)   標誌(一般是有多位的數值)

  fn      Function                              函數

  g_      global                                全局的

  h       Handle                                句柄

  i       Integer                               整數

  l       Long                                  長整數

  lp      Long pointer                          長指針

  m_      Data member of a class                一個類的數據成員

  n       Short int                             短整數

  p       Pointer                               指針

  s       String                                字符串

  sz      Zero terminated String                0結尾的字符串

  tm      Text metric                           文本規則

  u       Unsigned int                          無符號整數

  ul      Unsigned long (ULONG)                 無符號長整數

  w       WORD (unsigned short)                 無符號短整數

  x,y     x, y coordinates (short)              座標值/短整數

  v       void                                 

以上轉載來自:http://seanlee.blogbus.com/logs/2004/12/560998.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章