匈牙利命名 MFC命名等一系列命名規範

MFC命名規則

匈牙利命名法關鍵是:

標識符的名字以一個或者多個小寫字母開頭作爲前綴;

前綴之後的是首字母大寫的一個單詞或多個單詞組合,該單詞要指明變量的用途。

前綴

類型

a

數組 (Array)

b

布爾值 (Boolean)

by

字節 (Byte) == 8 bit

c

有符號字符 (Char)

cb

無符號字符 (Char Byte,沒有多少人用)

cr

顏色參考值 (ColorRef)

cx,cy

座標差(長度 ShortInt)

dw

雙字 (Double Word) == 4 Byte == 4 * 8 bit

fn

函數(function)

h

句柄(Handle)

i

整型(int)

l

長整型 (Long int)

lp

長指針(Long Pointer)

m_

類的成員(member of a class)

n

短整型 (Short Int)

np

近指針(Near Pointer)

p

指針(Pointer)

s

字符串型(string)

sz

以字符”結尾的字符串 (String with Zero End)

w

字(Word) == 2 Byte == 2 * 8 bit

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;

vc資源名字定義格式:

菜單: IDM_XX //M:Menu

位圖: IDB_XX //B:Bitmap

對話框: IDD_XX //D:Dialog

字符串: IDS_XX //S:String

ICON: IDI_XX //I:Icon

按鈕控件: IDC_BTN_XX //BTN:Button

編輯控件: IDC_EDT_XX //EDT:EditBox

列表控件: IDC_LST_XX //LST:ListCtrl

樹表控件: IDC_TRE_XX //TRE:TreeCtrl

富文本控件: IDC_RCH_XX //RCH:RichEdit

靜態本控件: IDC_STT_XX //STT:StaticText

組合框控件: IDC_CMB_XX //CMB:ComboBox

滾動條控件: IDC_SCR_XX //SCR:ScrollBar

滑動條控件: IDC_SLD_XX //SLD:Slider

多選項控件: IDC_CHK_XX //CHK:CheckBox

單選項控件: IDC_RDB_XX //RDB:RadioButton

——————————————————————————————————————————————————————————————————————

MFC中變量的命名方法
匈牙利命名法

匈牙利命名法是一種編程時的命名規範。基本原則是:變量名=屬性+類型+對象描述,其中每一對象的名稱都要求有明確含義,可以取對象名字全稱或名字的一部分。命名要基於容易記憶容易理解的原則。保證名字的連貫性是非常重要的。

舉例來說,表單的名稱爲form,那麼在匈牙利命名法中可以簡寫爲frm,則當表單變量名稱爲Switchboard時,變量全稱應該爲frmSwitchboard。這樣可以很容易從變量名看出Switchboard是一個表單,同樣,如果此變量類型爲標籤,那麼就應命名成lblSwitchboard。可以看出,匈牙利命名法非常便於記憶,而且使變量名非常清晰易懂,這樣,增強了代碼的可讀性,方便各程序員之間相互交流代碼。

這種命名技術是由一位能幹的Microsoft程序員查爾斯·西蒙尼(Charles Simonyi) 提出的,他出生在匈牙利。在 Microsoft 公司中和他一起工作的人被教會使用這種約定。這對他們來說一切都很正常。但對那些 Simonyi 領導的項目組之外的人來說卻感到很奇特,他們認爲這是死板的表達方式,甚至說帶有這樣奇怪的外觀是因爲它是用匈牙利文寫的。從此這種命名方式就被叫做匈牙利命名法。

據說這種命名法是一位叫 Charles Simonyi 的匈牙利程序員發明的,後來他在微軟呆了幾年,於是
這種命名法就通過微軟的各種產品和文檔資料向世界傳播開了。現在,大部分程序員不管自己使用
什麼軟件進行開發,或多或少都使用了這種命名法。這種命名法的出發點是把量名變按:屬性+類型
+對象 描述的順序組合起來,以使程序員作變量時對變量的類型和其它屬性有直觀的瞭解,下面
是HN變量命名規範,其中也有一些是我個人的偏向:

屬性部分

全局變量
g_

常量
c_

c++類成員變量
m_

靜態變量
s_

類型部分
指針
p

函數
fn

無效
v

句柄
h

長整型
l

布爾
b

浮點型(有時也指文件)
f

雙字
dw

字符串
sz

短整型
n

雙精度浮點
d

計數
c(通常用cnt)

字符
ch(通常用c)

整型
i(通常用n)

字節
by


w

實型
r

無符號
u

描述部分
最大
Max
最小
Min
初始化
Init
臨時變量
T(或Temp)
源對象
Src
目的對象
Dest

這裏順便寫幾個例子:
hwnd : h 是類型描述,表示句柄, wnd 是變量對象描述,表示窗口,所以 hwnd 表示窗口句柄;
pfnEatApple : pfn 是類型描述,表示指向函數的指針, EatApple 是變量對象描述,所以它表示
指向 EatApple 函數的函數指針變量。
g_cch : g_ 是屬性描述,表示全局變量,c 和 ch 分別是計數類型和字符類型,一起表示變量類
型,這裏忽略了對象描述,所以它表示一個對字符進行計數的全局變量。
上面就是HN命名法的一般規則。

小結:匈牙利命名法

匈牙利命名法

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;

一般前綴命名規範 前綴 類型 實例
C 類或結構 CDocument,CPrintInfo
m_ 成員變量 m_pDoc,m_nCustomers

變量命名規範 前綴 類型 描述 實例
ch char 8位字符 chGrade
ch TCHAR 如果_UNICODE定義,則爲16位字符 chName
b BOOL 布爾值 bEnable
n int 整型(其大小依賴於操作系統) nLength
n UINT 無符號值(其大小依賴於操作系統) nHeight
w WORD 16位無符號值 wPos
l LONG 32位有符號整型 lOffset
dw DWORD 32位無符號整型 dwRange
p * 指針 pDoc
lp FAR* 遠指針 lpszName
lpsz LPSTR 32位字符串指針 lpszName
lpsz LPCSTR 32位常量字符串指針 lpszName
lpsz LPCTSTR 如果_UNICODE定義,則爲32位常量字符串指針 lpszName
h handle Windows對象句柄 hWnd
lpfn callback 指向CALLBACK函數的遠指針

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

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

——————————————————————————————————————————————————————————————————————————
一、MFC中ID 編號原則

IDC_:控件的ID命名前綴(Control)

IDM_:菜單的ID命名前綴(Menu)

IDD_:對話框的ID命名前綴(Dialog)

IDR_:資源的ID命名前綴(Resource)

IDS_:字符串的ID命名前綴(String)

IDB_:位圖資源的ID命名前綴(Bitmap)

二、MFC系統消息前綴小集
ABM 應用程序桌面工具條application desktop toolbar
BM 按鈕 button control
CB 組合框 combo box control
CBEM 擴展組合框 extended combo box control
CDM 通用對話框common dialog box
DBT 設備devicae
DL 下拉列表 drag list box
DM Default Push button control
DTM Date and time picker control
EM 編輯框edit control
HDM Header control
HXM 熱鍵hot key control
IPM IP控件IP address control
LB 列表框list box control
LVM 列表視圖list view control
MCM 日曆控件month calendar control
PBM 進度條progress bar
PGM Pager control
PSM 屬性property control
RB 伸縮條rebar control
SB 狀態條status bar window
SBM 滾動條scrol bar control
STM 靜態條static control
TB 工具條toolbar
TBM 跟蹤條trackbar
TCM Tab control
TTM Tooltip control
TVM 樹視圖tree_view control
UDM Up_down control
WM 一般窗口general window

明確一個問題:BM/NM等中間的M表示向控件發送的消息,也就是命令控件做事情;BN等中間的N,表示控件向外部(父窗口)發出的通知,表示自己的狀態,不要混淆這兩個不同方向的東西

——————————————————————————————————————————————————————————————————

————————————————————————————————————————————————————————————

http://blog.sina.com.cn/s/blog_5f2833390100x20x.html

匈牙利命名法包括與下列命名有關的約定:變量、函數、類型和常量、類。

(1)變量的匈牙利命名法。
應用匈牙利命名法,所有的變量名都應該以前綴+名字的形式出現。比如:

char* szName; //以0爲結束符的符串,存儲的是名字變量 BOOL bCanExit; //布爾型變量,能退出嗎 DWORD dwMaxCount; //32位雙字變量,最大記數
(2)函數的匈牙利命名法。
與變量的命名不同的是,函數的命名不帶前綴,函數中每一個單詞的開頭字母都要大寫。比如:

int ConvertNumber( int ix ); void ShowMessage( char* szMessage );
(3)類型和常量的匈牙利命名法。
所有的類型和常量命名都是大寫字母,比如:

define MAX_NUM 256 typedef unsigned char UCHAR;

(4)類的匈牙利命名法。
類的命名規則是在名稱前面加上一個字母C,比如:

class CMyClass { public: CMyClass(); ~CMyClass(); … private: m_szName;

};
在對類的成員變量命名的時候,一般要在變量名前加上m_前綴。一般來說,最好按照此規則來編程,這樣在以後讀程序或者修改程序時,能夠更快地瞭解變量的作用。

VC命名規則

一、程序風格:
1、嚴格採用階梯層次組織程序代碼:
各層次縮進的分格採用VC的缺省風格,即每層次縮進爲4格,括號位於下一行。要求相匹配的大括號在同一列,對繼行則要求再縮進4格。例如:
2、提示信息字符串的位置
在程序中需要給出的提示字符串,爲了支持多種語言的開發,除了一些給調試用的臨時信息外,其他所有的提示信息必須定義在資源中。
3、對變量的定義,儘量位於函數的開始位置。

二、命名規則:
1、變量名的命名規則
①、變量的命名規則要求用“匈牙利法則”。即開頭字母用變量的類型,其餘部分用變量的英文意思或其英文意思的縮寫,儘量避免用中文的拼音,要求單詞的第一個字母應大寫。
即: 變量名=變量類型+變量的英文意思(或縮寫)
對非通用的變量,在定義時加入註釋說明,變量定義儘量可能放在函數的開始處。
見下表:
bool(BOOL) 用b開頭 bIsParent
byte(BYTE) 用by開頭 byFlag
short(int) 用n開頭 nStepCount
long(LONG) 用l開頭 lSum
char(CHAR) 用c開頭 cCount
float(FLOAT) 用f開頭 fAvg
double(DOUBLE) 用d開頭 dDeta
void(VOID) 用v開頭 vVariant
unsigned int(WORD) 用w開頭 wCount
unsigned long(DWORD) 用dw開頭 dwBroad
HANDLE(HINSTANCE) 用h開頭 hHandle
DWORD 用dw開頭 dwWord
LPCSTR(LPCTSTR) 用str開頭 strString
用0結尾的字符串 用sz開頭 szFileName
對未給出的變量類型要求提出並給出命名建議給技術委員會。
②、指針變量命名的基本原則爲:
對一重指針變量的基本原則爲:
“p”+變量類型前綴+命名
如一個float*型應該表示爲pfStat
對多重指針變量的基本規則爲:
二重指針: “pp”+變量類型前綴+命名
三重指針: “ppp”+變量類型前綴+命名
……
③、全局變量用g_開頭,如一個全局的長型變量定義爲g_lFailCount,即:變量名=g_+變量類型+變量的英文意思(或縮寫)
④、靜態變量用s_開頭,如一個靜態的指針變量定義爲s_plPerv_Inst,即:變量名=s_+變量類型+變量的英文意思(或縮寫)
⑤、成員變量用m_開頭,如一個長型成員變量定義爲m_lCount;即:變量名=m_+變量類型+變量的英文意思(或縮寫)
⑥、對枚舉類型(enum)中的變量,要求用枚舉變量或其縮寫做前綴。並且要求用大寫。
如:enum cmEMDAYS
{
EMDAYS_MONDAY;
EMDAYS_TUESDAY;
……
};
⑦、對struct、union、class變量的命名要求定義的類型用大寫。並要加上前綴,其內部變量的命名規則與變量命名規則一致。
結構一般用S開頭
如:struct ScmNPoint
{
int nX;//點的X位置
int nY; //點的Y位置
};
聯合體一般用U開頭
如: union UcmLPoint
{
long lX;
long lY;
}
類一般用C開頭
如:
class CcmFPoint
{

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