## 開發規范
遵循開發規范可以增強代碼的可讀性和可維護性,提高程序的執行效率,降低由于不規范的編寫或修改導致的各種錯誤發生機率。本節將以ExDUI開發中的常見情況對代碼開發中的規范要求進行說明。
* * * * *
### 總體要求
1. 開發者應當嚴格執行本規范以確保源代碼的可讀性及可維護性。
2. 所有的程序都應配有注釋,以便提高程序代碼的可讀性。
3. 程序開發過程中,除特定情況應盡量避免使用拼音或拼音首字母的命名方式。
* * * * *
### 文件命名規范
1. 文件的命名應以與該文件相關的關鍵字詞命名。
2. 命名的長度應在3-30個左右的字符。
3. 應嚴格區分文件的后綴名,對于常用格式的文件后綴名應遵循系統默認后綴名,對于相同私有格式的文件后綴名應保持一致。
4. 文件名應盡量使用英文進行命名,盡量不使用生僻字或Ansi編碼以外的字符,以免部分軟件不支持。
5. 使用英文名應遵循首字母大寫的原則,盡量不使用空格,若使用縮寫,應使用本節最后統一的縮寫范例。
6. 不建議使用拼音或其他語言進行命名。
7. 應對軟件工程中的各項文件進行目錄分類管理,目錄的命名遵照上面的規范實施。
* * * * *
### 變量名命名規范
1. 變量名的命名應與該變量存放數據有關。
2. 變量名的命名應盡量使用英文,遵循匈牙利命名法或駝峰命名法。
3. 變量名前綴應包含作用域、類型等關鍵信息。
4. 變量的命名應避免使用與函數名、程序集名、窗口等對象相同的名稱。
5. 避免使變量名為另一個變量名的一部分。
6. 邏輯變量應包括 Is(是否/可否) 關鍵字,如 bWindowIsEnable 或 窗口是否可用。
7. 根據變量的作用域,變量名前綴可分為全局變量:g_XXX(全_XXX),程序集/類成員變量:m_XXX(集_XXX),靜態變量:s_XXX(靜_XXX),參數變量和局部變量:不加前綴(XXX)。
* * * * *
### 函數/子程序/成員方法命名規范
1. 函數/子程序/成員方法(以下統稱函數)的命名應與該函數的功能有關。
2. 函數的命名應盡量使用英文,遵循駝峰命名法或首字母大寫命名法。
3. 函數名應由動詞開頭,如 SaveImage 或 保存圖片。
4. 若函數的返回值具有特定意義,應在函數名中得到體現,如第三點中的例子所示。
5. 當類中成員方法為某屬性的讀取設置器時,應以名詞開頭并首字母大寫,如 ImageWidth 或 圖片寬度。
6. 全局函數應包含與其功能相關的功能前綴,如 Obj_XX、組件_XX、Ex_Wnd_XX、窗口_XX等。
* * * * *
### 常量命名規范
1. 常量的命名應與該常量值代表的意義有關。
2. 常量的命名應盡量使用英文名命名。
3. 若使用英文命名,常量名應保持全部大寫,單詞間用下劃線連接。
4. 常量應帶有前綴用于描述常量所屬的組別信息,如 STRING_ALIGN_CENTER 或 文本對齊_居中。
* * * * *
### 程序編寫規范
1. 對于不同的程序功能,應區分不同的程序集或命名空間。
2. 循環中盡量不使用常數,假設某數組a,成員為10。循環不應使用 for i=1 to 10,而是 for i=1 to a.length,或不應使用 計次循環首(10,i) 而使用 計次循環首(取數組成員數(a),i)。
3. 盡量不隨便定義全局變量。
4. 一個變量應只用于一個用途,且變量類型應符合該用途,同時變量名前綴應與變量類型一致。
5. 一個函數應實現一種功能,不應在一個函數中實現多種不同功能。
6. 函數中應盡量減少對全局變量的使用,必要時將其變為局部變量使用。
7. 函數與函數之間應只存在包含關系,而不應存在交叉關系。
* * * * *
### 注釋規范
1. 注釋應使用通順易懂的中文語句和中文符號。
2. 對某段代碼可以進行統一的段注釋,也可對每句代碼進行行注釋,段注釋應寫在該段代碼的上方。
3. 對重要變量和函數,邏輯和循環分支應有注釋。
4. 可對部分代碼進行注釋調試,或將部分參數替換時臨時放置于注釋中。
5. 在代碼編寫完畢交付時,應刪掉臨時的或無關的注釋內容。
6. 對于特定類型函數,需要進行附加的注釋內容:
1. 事件函數應注釋有回調函數的聲明形式及參數意義,如“回調(整數行 X坐標,整數型 Y坐標,整數型 狀態[取值為狀態_開頭的常量]),返回 整數型[是否攔截,1為攔截 0為放行]”。
2. 屬性讀取設置器函數若與XML綁定,應注釋XML的對應屬性名和屬性值信息,如“@XML:Point='X坐標[整數型],Y坐標[整數型]'”
* * * * *
### 布局文件編寫規范
1. 布局文件遵循標準的XML語法。
2. 布局文件是大小寫區分的,編寫時請注意。
3. 布局文件中請區分使用閉合節點(<xx />)和開放節點(<xx></xx>),以便更好的表示是否有子控件。
4. 各節點的節點名應設置為與節點相關的名稱,如<LoginUserName ... />表示登錄用戶名。
5. XML中存在轉義字符,請注意自行轉換。
6. XML中的所有符號均為半角符號,不可使用全角符號代替。
* * * * *
## 附錄
### 附1:主要名詞/動詞漢英對照表
| 中文 | 英文 |
| -- | -- |
| 獲取 | Get |
| 設置 | Set |
| 附加 | Attach |
| 創建 | Create |
| 銷毀 | Destory |
| 釋放 | Free |
| 編輯 | Edit |
| 修改 | Modify |
| 加載 | Load |
| 控制 | Control/Ctrl |
| 初始化 | Initialization/Init |
| 主要的 | Main |
* * * * *
### 附2:縮寫標準
| 縮寫 | 全稱 | 解釋 |
| -- | -- | -- |
| addr | Address| 地址 |
| arr/ary | Array | 數組 |
| bg/bkg | Background | 背景 |
| func | Function| 函數 |
| img | Image | 圖像 |
| info | Infomation | 信息 |
| max | Maximum | 最大 |
| min | Minimum | 最小 |
| msg | Message | 消息 |
| tmp/temp | Temporary | 臨時的 |
| num | Number | 數字/號碼 |
| bmp | Bitmap | 位圖 |
| pic | Picture | 圖片 |
| proj | Project | 工程 |
| rnd | Random | 隨機 |
| pwd | Password | 密碼 |
| subj | Subject | 主題 |
| doc | Document | 文檔 |
| sys | System | 系統 |
| wnd | Window | 窗口 |
| ele | Element | 元素 |
| obj | Object | 對象 |
| ctrl | Control | 控制/控件 |
| init | Initialization | 初始化 |
| str | String | 字符串|
| cls | Class | 類 |
| lib | Library | 庫 |
| proc | process | 過程 |
| ptr | Pointer | 指針 |
| cbk | Callback | 回調 |
* * * * *
### 附3 匈牙利命名法 變量前綴縮寫
| 類型名稱 | 前綴縮寫| 示例 |
| -- | -- | -- |
| **類型前綴** |||
| boolean/邏輯型 | b | bIsOK |
| byte/字節型 | by | byData |
| binary/字節集 | bin/lpby/lp | binData,lpbyData,lpData |
| datetime/時間日期 | dtm | dtmNow |
| int/整數型 | i/n | iWidth,nWidth |
| float/小數型 | f | fDistance |
| double/雙精度小數型 | d/lf | dMoney,lfMoney |
| long/長整型 | l | lLength |
| short/短整型 | n | nSecond |
| ptr/指針 | p/lp | pVar,lpVar |
| function/函數 | fn | fnGetX,pfnGetY |
| void/無類型 | v | pvVar |
| handle/句柄 | h | hWnd |
| string/字符串 | sz | szName |
| Unicode字符串 | wz | wzName |
| object/對象 | o/obj | oPeople |
| word/字(2字節) | w | wMonth |
| double word/雙字(4字節) | dw | dwSize |
| unsigned/無符號 | u | uHeight |
| array/數組 | a/arr | aPeople,arrPeople |
| **用途前綴** |||
| file/文件 | f | fOut |
| count/計數 | c | cRef |
| temporary/臨時 | t | tData |
| color/顏色 | cr | crText |
| picture/圖片 | pic | picFace |
| source/源 | src | srcDC |
| destination/目的 | dest/dst | destDC |
| Point/坐標 | pt | ptCursor |
| Rect/矩形 | rc | rcWindow |
| callback/回調函數 | cbk | cbkOnClick |
| **控件前綴** |||
|Label/標簽| lab | labUserName |
|Button/按鈕| btn | btnOK |
|Edit/文本框| txt,edt | txtPwd,edtFileName |
|CheckBox/復選框| chk | chkRememberMe |
|RadioButton/單選框| rdb,radio | rdbAll |
|ImageBox/圖片框| img | imgFace |
|ListView/列表框| lst | lstFileList |
|ComboBox/組合框| combo | comboBirthYear |
|GroupBox/分組框| gp | gpSystem |
|Page/頁面| pg | pgInfo |
|Window/窗口| wnd,frm | wndLogin,frmMain |
- 序言
- 基礎
- 概念
- 術語
- 相關技術
- 入門
- 如何獲取
- 環境需求
- 使用條件
- 開發規范
- 文件結構
- 讓我們開始吧
- 全局命令
- 引擎命令
- Ex_Init
- Ex_UnInit
- Ex_XMLRegisterValueCallback
- Ex_XMLRegisterCallback
- Ex_GetLong
- 輔助命令
- Ex_SleepEx
- Ex_GetHash
- Ex_Atom
- 窗口命令
- 窗口相關
- Ex_WndRegisterClass
- Ex_WndCreate
- Ex_WndMsgLoop
- 皮膚相關
- Ex_DUIBindWindow
- Ex_DUICreateFromLayout
- Ex_DUILoadLayout
- Ex_DUIHandEvent
- Ex_DUIShowWindow
- Ex_DUIShowWindowEx
- Ex_DUIGetBkgColor
- Ex_DUISetBkgColor
- Ex_DUISetBkgImage
- Ex_DUIGetAlpha
- Ex_DUISetAlpha
- Ex_DUIGetSysCtl
- Ex_DUIGetObjFromID
- Ex_DUIGetClientRect
- Ex_DUIInvalidateRect
- Ex_DUIObjFromWindowPoint
- Ex_DUIObjFromScreenPoint
- Ex_DUIAddTrayIcon
- Ex_DUIPopupTrayIcon
- Ex_DUIPopupTipsEx
- Ex_DUIDeleteTrayIcon
- 關于布局文件
- 控件命令
- 控件基類
- 關于布局文件
- Ex_ObjCreate
- Ex_ObjCreateEx
- Ex_ObjDestroy
- Ex_ObjGetLong
- Ex_ObjSetLong
- Ex_ObjDispatchMessage
- Ex_ObjSendMessage
- Ex_ObjPostMessage
- Ex_ObjCallProc
- Ex_ObjDefProc
- Ex_ObjDispatchOwnerMessage
- Ex_ObjUpdate
- Ex_ObjInvalidateRect
- Ex_ObjBeginPaint
- Ex_ObjEndPaint
- Ex_ObjGethWnd
- Ex_ObjGethExDui
- Ex_ObjGethTheme
- Ex_ObjGetParent
- Ex_ObjSetParent
- Ex_ObjRegister
- Ex_ObjGetText
- Ex_ObjSetText
- Ex_ObjGetBkColor
- Ex_ObjSetBkColor
- Ex_ObjGetBkImageInfo
- Ex_ObjSetBkImageInfo
- Ex_ObjGetBkMode
- Ex_ObjSetBkMode
- Ex_ObjGetTextColor
- Ex_ObjSetTextColor
- Ex_ObjGetBorderColor
- Ex_ObjSetBorderColor
- Ex_ObjGetAlpha
- Ex_ObjSetAlpha
- Ex_ObjSetFont
- Ex_ObjSetRedraw
- Ex_ObjValidate
- Ex_ObjSetTimer
- Ex_ObjKillTimer
- Ex_ObjEnableScrollBar
- Ex_ObjGetScrollBar
- Ex_ObjGetScrollPos
- Ex_ObjSetScrollPos
- Ex_ObjGetScrollRange
- Ex_ObjSetScrollRange
- Ex_ObjGetTrackPos
- Ex_ObjGetScrollInfo
- Ex_ObjSetScrollInfo
- Ex_ObjGetClassNameA
- Ex_ObjGetClassNameW
- Ex_ObjGetRect
- Ex_ObjClientToWindow
- Ex_ObjMove
- Ex_ObjLockPos
- Ex_ObjIsVisible
- Ex_ObjShow
- Ex_ObjEnable
- Ex_ObjGetAnimationInfo
- Ex_ObjSetAnimationInfo
- Ex_ObjBeginAnimation
- Ex_ObjHandEvent
- Ex_ObjHandEventFromID
- 控件消息
- 介紹
- 屬性分發
- 設置提示文本
- 獲取提示文本
- 組件狀態被改變
- 計算尺寸
- 獲取Tab焦點區域矩形
- 繪制背景
- 繪制非客戶區
- 繪制主題數據
- 系統控件
- 標題欄
- 圖標控件
- 系統按鈕
- 菜單
- 基礎控件
- 標簽
- 按鈕
- 普通按鈕
- 圖形按鈕
- 組圖按鈕
- 下拉按鈕
- 圖片框
- 鏈接框
- 選擇框
- 三態選擇框
- 單選框
- 分組框
- 進度條
- 滾動條
- 編輯框
- 豐富文本框
- 高級控件
- 組合框
- 列表框
- 選擇夾
- 瀏覽框
- 擴展控件
- 繪圖命令
- 關于繪圖引擎
- 設備上下文
- 畫布
- _excanvas_getlasterror
- _excanvas_setlasterror
- _excanvas_getlong
- _canvas_create
- _canvas_destroy
- _canvas_validate
- _canvas_beginpaint
- _canvas_endpaint
- _canvas_clear
- _canvas_drawimage
- _canvas_drawimagerect
- _canvas_drawimagerectrect
- _canvas_drawline
- _canvas_drawlinefrompen
- _canvas_drawimagefromdrawdata
- _canvas_drawimagegird
- _canvas_drawrectangle
- _canvas_fillrectangle
- _canvas_fillrectanglefrombrush
- _canvas_getdc
- _canvas_width
- _canvas_height
- _canvas_setbkmode
- _canvas_getbkmode
- _canvas_bitblt
- _canvas_bitblt_dc
- _canvas_alphablt
- _canvas_alphablt_dc
- _canvas_cliprect
- _canvas_cliphrgn
- _canvas_resetclip
- _canvas_savetofile
- _canvas_resize
- _canvas_drawrectanglefrompen
- _canvas_setfont
- _canvas_getfont
- _canvas_getlogfont
- _canvas_getpixel
- _canvas_calctextsize
- _canvas_drawtext
- _canvas_savetomemory
- _canvas_blur
- 圖像
- _image_width
- _image_height
- _image_createfromfile
- _image_destory
- _image_createfromstream
- _image_selectactiveframe
- _image_getframecount
- _image_copy
- _image_copyrect
- _image_createfrommemory
- _image_savetofile
- _image_getframedelay
- _image_createfromhicon
- _image_create
- _image_savetomemory
- _image_lockbits
- _image_createfromhres
- 畫筆
- _pen_create
- _pen_destory
- _pen_create_frombrush
- 畫刷
- _brush_create
- _brush_destroy
- _brush_createfromimage
- _brush_create_lineargradientfrompoint
- 字體
- _font_createfromfamily
- _font_create
- _font_destroy
- _font_getlogfont
- _font_createfromlogfont
- 路徑
- 區域
- 文本格式
- 效果
- 布局文件
- 關于XML
- 文件結構
- 特殊語法
- 主題文件
- 關于EXT
- 文件結構
- 貼圖文件
- 描述文件
- 制作主題
- 相關命令
- Ex_ThemeLoad
- Ex_ThemeFree
- Ex_ThemepData
- Ex_ThemeGetData
- Ex_ThemeGetColor
- Ex_ThemeGetRect
- Ex_ThemeDraw
- Ex_ThemeDrawEx
- Ex_ThemeDispatchDrawEx
- 緩動特效
- 關于特效
- 緩動種類
- 相關命令
- 授權機制