## 开发规范
遵循开发规范可以增强代码的可读性和可维护性,提高程序的执行效率,降低由于不规范的编写或修改导致的各种错误发生机率。本节将以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
- 缓动特效
- 关于特效
- 缓动种类
- 相关命令
- 授权机制