• 匈牙利命名法收藏


    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_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


    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"应当是一个函数的名字,该函数将使用类型为Hwnd,X和Y的参数来初始化一个"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+2个CHAR。
     
    chw, wt, wz, wtz
     ch,sz,st和stz的宽字符(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) pointer和huge 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或者任何其它值)。为了避免混淆,最好不要为同一类型同时定义Null和Nil值。
     
    Src
     操作源,典型地用法是和Dest配套使用,如:

    *pchDest = *pchSrc
     
    Dest
     操作目的,参见Src。

  • 相关阅读:
    tectangular container
    WIFI
    微信小程序动态改变数组或对象中的某个属性值
    常用的正则表达式
    前端登录通过账号显示对应头像
    JS返回页面时自动回滚到历史浏览位置
    JavaScript让登录或搜索文本框自动获得焦点
    react脚手架应用
    npm教程3_脚手架原理以及bootstrap引入
    npm教程2
  • 原文地址:https://www.cnblogs.com/huty/p/8518807.html
Copyright © 2020-2023  润新知