前言自己学习MiniGui也快一年了，粗浅的学习了一下，本文是根据《MINIGUI-PROG-GUIDE-V3.0-C》中的内容整理而来，根据自己的理解做了一些分类，大部分都是一些函数的说明，方便自己以后学习MiniGui时查阅。现在分享出来，供大家一起学习。当然在学习的过程中也遇到过一些坑，像自定义控件，主窗口透明背景，窗口弹出动画啊，控件动画等等，有时间也会分享出来。1 窗口的创建1.1 创建函数函数含义备注CreateMainWindowEx主窗口创建函数以Ex结尾的函数都是新增加的函数CreateWindowEx控件的创建函数以Ex结尾的函数都是新增加的函数DialogBoxIndirectParamEx模态对话框的创建函数以Ex结尾的函数都是新增加的函数CreateMainWindowIndirectParamEx非模态对话框的创建函数以Ex结尾的函数都是新增加的函数CreateMainWindow无扩展主窗口创建函数 CreateWindow无扩展控件的创建函数 DialogBoxIndirectParam无扩展模态对话框的创建函数 CreateMainWindowIndirectParam无扩展非模态对话框的创建函数 CreateWindowEx2对CreateWindowEx的封装 1.2 主窗口创建属性属性含义CreateInfo.dwStyle窗口风格CreateInfo.spCaption窗口的标题CreateInfo.dwExStyle窗口的附加风格CreateInfo.hMenu附加在窗口上的菜单句柄CreateInfo.hCursor在窗口中所使用的鼠标光标句柄CreateInfo.hIcon程序的图标CreateInfo.MainWindowProc该窗口的消息处理函数指针CreateInfo.lx窗口左上角相对屏幕的绝对横坐标,以象素点表示CreateInfo.ty窗口左上角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.rx窗口右下角相对屏幕的绝对横坐标,以象素点表示CreateInfo.by窗口右下角相对屏幕的绝对纵坐标,以象素点表示CreateInfo.iBkColor窗口背景颜色CreateInfo.dwAddData附带给窗口的一个 32 位值CreateInfo.hHosting窗口消息队列的托管窗口2 预定义的控件类控件类类名称宏定义静态框"static"CTRL_STATIC按钮"button"CTRL_BUTTON列表框"listbox"CTRL_LISTBOX单行编辑框"sledit"CTRL_SLEDIT多行编辑框"mledit"CTRL_MLEDIT文本编辑框"textedit"CTRL_TEXTEDIT单行双向文本编辑框"bidisledit"CTRL_BIDISLEDIT组合框"combobox"CTRL_COMBOBOX菜单按钮"menubutton"CTRL_MENUBUTTON进度条"progressbar"CTRL_PROGRESSBAR滑块"trackbar"CTRL_TRACKBAR工具栏"newtoolbar"CTRL_NEWTOOLBAR属性表"propsheet"CTRL_PROPSHEET滚动窗口控件"ScrollWnd"CTRL_SCROLLWND滚动型控件"ScrollView"CTRL_SCROLLVIEW树型控件"treeview"CTRL_TREEVIEW列表型控件"listview"CTRL_LISTVIEW月历"MonthCalendar"CTRL_MONTHCALENDAR旋钮控件"SpinBox"CTRL_SPINBOX酷工具栏"CoolBar"CTRL_COOLBAR动画控件"Animation"CTRL_ANIMATION网格控件"gridview"CTRL_GRIDVIEW图标型控件"IconView"CTRL_ICONVIEW滚动条控件"ScrollBar"CTRL_SCROLLBAR3 风格3.1 窗口通用风格风格含义备注WS_NONE未指定任何风格 WS_CHILD创建子窗口 WS_VISIBLE创建初始可见的窗口 WS_DISABLED创建初始被禁止的窗口 WS_CAPTION创建含标题栏的主窗口仅用于主窗口WS_SYSMENU创建含系统菜单的主窗口仅用于主窗口WS_BORDER创建有边框的窗口 WS_THICKFRAME创建具有厚边框的窗口 WS_THINFRAME创建具有薄边框的窗口 WS_VSCROLL创建带垂直滚动条的窗口 WS_HSCROLL创建带水平滚动条的窗口 WS_MINIMIZEBOX标题栏上带最小化按钮仅用于主窗口WS_MAXIMIZEBOX标题栏上带最大化按钮仅用于主窗口WS_EX_NONE无扩展风格 WS_EX_USEPRIVATECDC使用私有DC仅用于主窗口WS_EX_TOPMOST建立始终处于顶层的主窗口仅用于主窗口WS_EX_TOOLWINDOW建立Tooltip主窗口仅用于主窗口。Tooltip主窗口将不会拥有输入焦点,但仍接收鼠标消息WS_EX_TRANSPARENT透明窗口风格 仅用于控件 WS_EX_USEPARENTFONT使用父窗口字体作为默认字体 WS_EX_USEPARENTCURSOR使用父窗口光标作为默认光标 WS_EX_NOCLOSEBOX主窗口标题栏上不带关闭按钮 WS_EX_CTRLASMAINWIN建立可显示在主窗口之外的控件仅用于控件WS_EX_TROUNDCNS左上角和右上角是圆角的窗口 WS_EX_BROUNDCNS左下角和右下角是圆角的窗口 WS_EX_CLIPCHILDREN调用BegainPaint获得DC并刷新窗口客户区时, 子窗口所占区域将被剪切;也就是说,向窗口客户区的输出不会输出到子窗口所在位置。该风格将导致额外的内存占用并影响绘制效率。只有窗口的输出和其子窗口的输出发生重叠时才应使用该风格,一般的对话框窗口、属性页控件无需使用该风格。WS_EX_LEFTSCROLLBAR创建垂直滚动条在左侧的窗口 WS_EX_AUTOSECONDARYDC双缓冲窗口扩展风格仅用于主窗口3.2 控件风格3.2.1 仅用于对话框控件的风格风格含义备注WS_GROUP具有该风格的控件将成为同组控件的打头控件从该控件到下一个WS_GROUP风格的控件之前的,或者下一个不同种类的控件之前的控件属于同一组WS_TABSTOP具有TAB键停止功能当用户在对话框中使用TAB键和Shift-TAB键切换输入焦点时,具有该风格的控件可获得焦点3.2.2 静态框风格风格含义备注SS_SIMPLE显示单行文本控件文本不会自动换行显示,并且文本永远是左对齐SS_LEFT左对齐用来显示多行文本SS_CENTER中对齐用来显示多行文本SS_RIGHT右对齐用来显示多行文本SS_LEFTNOWORDWRAP扩展文本中的TAB符但是不做自动换行处理SS_BITMAP显示一幅位图 SS_ICON显示一幅图标 SS_CENTERIMAGE居中显示与SS_REALSIZEIMAGE一起使用，则取消缩放，居中显示SS_REALSIZEIMAGE消缩放操作，并显示在静态框的左上方默认情况下,位图和图标要经过适当的缩放充满整个静态框SS_GROUPBOX分组框是一个矩形框,分组框标题在其顶部显示,分组方块常用来包含其他的控件SS_WHITERECT以白色填充静态框矩形 SS_GRAYRECT以灰色填充静态框矩形 SS_BLACKRECT以黑色填充静态框矩形 SS_GRAYFRAME灰色边框 SS_WHITEFRAME白色边框 SS_BLACKFRAME黑色边框 SS_NOTIFY接收静态框消息 3.2.3 按钮风格风格含义备注BS_PUSHBUTTON边框要细一些 BS_DEFPUSHBUTTON"DEF"代表"默认"，边框要粗一些默认接收ENTER键输入的按钮,而不管当前的输入焦点处于哪个控件上BS_MULTLINE指定显示多行文本通常情况下,按钮文本会以单行的形式在垂直和水平方向居中显示,不会自动换行BS_LEFTTEXT文本置于复选框的左边 BS_LEFT文本在左边 BS_CENTER文本在中间 BS_RIGHT文本在右边 BS_TOP文本在上边 BS_BOTTOM文本在下边 BS_VCENTER文本居中垂直 BS_BITMAP普通按钮上显示位图 BS_ICON普通按钮上显示图标 BS_REALSIZEIMAGE使位图或图标显示在控件中部,不作任何缩放默认情况下位图或图标会缩放显示以充满整个按钮窗口范围BS_CHECKBOX复选框应用程序需要自己向该控件发送消息来设定选中标记BS_AUTOCHECKBOX复选框控件会自动在选中和非选中状态之间切换BS_3STATE复选框功能同上，复选框内是灰色的,这种状态表明该复选框不能被选择或者禁止使用BS_AUTO3STATE复选框功能同上，复选框内是灰色的,这种状态表明该复选框不能被选择或者禁止使用BS_PUSHLIKE使复选框以普通按钮的形式显示选中时显示为按下状态,未选中时显示为正常状态BS_RADIOBUTTON单选钮它的行为很像复选框，圆圈内的加重圆点表示该单选按钮已经被选中BS_AUTORADIOBUTTON单选钮自动显示用户的选择情况BS_PUSHLIKE使单选按钮以普通按钮的形式显示选中时显示为按下状态,未选中时显示为正常状态BS_NOTIFY接收按钮消息 3.2.4 列表风格风格含义LBS_MULTIPLESEL多选列表框LBS_USEICON附带位图或者图标LBS_CHECKBOX在列表项旁边显示一个检查框LBS_AUTOCHECK自动切换选中状态LBS_NOTIFY选中某个列表项时产生通知消息LBS_SORT列表排序3.2.5 编辑框风格风格含义ES_UPPERCASE可以使编辑框只显示大写字母ES_LOWERCASE可以使编辑框只显示小写字母ES_PASSWORD编辑框用来输入密码,但用星号(*)显示输入的字符ES_READONLY建立只读编辑框,用户不能修改编辑框中的内容,但插入符仍然可见ES_BASELINE在编辑框文本下显示虚线ES_AUTOWRAP用于多行编辑框,当文本超过控件边界时,将自动换行ES_LEFT指定非多行编辑框的对齐风格,实现文本的左对齐风格ES_NOHIDESEL编辑框在失去焦点时保持被选择文本的选中状态ES_AUTOSELECT编辑框在得到焦点时自动选中所有的文本内容(仅针对单行编辑框)ES_TITLE在编辑框的第一行显示指定的标题,只适用于多行编辑框控件ES_TIP当编辑框的内容为空时,在其中显示相关的提示信息;只适用于SLEDIT控件ES_CENTER指定非多行编辑框的对齐风格,实现文本的居中对齐风格ES_RIGHT指定非多行编辑框的对齐风格,实现文本的右对齐风格其中适用于多行编辑框的风格有：ES_UPPERCASE, ES_LOWERCASE, ES_READONLY, ES_BASELINE, ES_AUTOWRAP, ES_NOHIDESEL,ES_TITLE其中适用于单行编辑框的风格有：ES_UPPERCASE, ES_LOWERCASE, ES_READONLY, ES_BASELINE, ES_LEFT, ES_CENTER, ES_RIGHT,ES_PASSWORD,ES_NOHIDESEL,ES_AUTOSELECT,ES_TIP3.2.6 组合框风格风格含义CBS_SIMPLE创建一个简单组合框CBS_DROPDOWNLIST创建下拉式组合框CBS_SPINLIST创建旋钮组合框CBS_SPINARROW_TOPBOTTOM箭头在内容的上下CBS_SPINARROW_LEFTRIGHT箭头在内容的左右CBS_READONLY使组合框的输入域成为只读区域CBS_UPPERCASE使键入编辑框中的文本自动变成大写CBS_LOWERCASE使键入编辑框中的文本自动变成小写CBS_EDITBASELINE使编辑框带有文本基线CBS_SORT使用该风格的组合框将自动对插入的条目进行排序CBS_EDITNOBORDER使得输入域不带边框CBS_AUTOFOCUS组合框在获得输入焦点之后,编辑框将自动获得输入焦点CBS_AUTOSPIN创建旋钮数字框,默认的最小值和最大值为0和100CBS_AUTOLOOP框中的数字将自动循环显示3.2.7 菜单按钮风格风格含义MBS_SORT对菜单按钮中的条目进行排序显示MBS_LEFTARROW箭头显示在菜单按钮的左侧MBS_NOBUTTON不显示按钮MBS_ALIGNLEFT菜单按钮上的文字向左对齐MBS_ALIGNRIGHT菜单按钮上的文字向右对齐MBS_ALIGNCENTER菜单按钮上的文字居中对齐3.2.8 进度条风格风格含义PBS_NOTIFY使用该风格的进度条控件会产生通知消息PBS_VERTICAL竖直显示进度条3.2.9 滑块风格风格含义TBS_NOTIFY滑块产生通知消息TBS_VERTICAL创建竖直的滑块，默认情况下,滑块是水平的TBS_TIP滑块两端显示文字说明，还将在控件的中部显示当前刻度值TBS_NOTICK不显示刻度TBS_BORDER风格可使滑块带有边框,该风格不常用3.2.10 工具栏风格风格含义NTBS_HORIZONTAL水平显示工具栏，这是默认风格NTBS_VERTICAL垂直显示工具栏NTBS_MULTLINE工具栏可多行显示，当工具项类型为NTBIF_NEWLINE时,将另起一行显示其后添加的工具项NTBS_WITHTEXT将在按钮下方或者按钮右边显示文本,默认显示在按钮位图的下方。这时,应用程序必须在添加按钮时指定按钮对应的文本。当文字在图标下方显示且按钮处于被激活状态时,按钮图片将突出显示NTBS_TEXTRIGHT配合NTBS_WITHTEXT风格使用时,该风格指定将文本显示在按钮位图的右边。当文字在图标右侧且按钮处于被激活状态时,按钮图片和文字都将突出显示NTBS_DRAWSTATES不使用按钮的高亮、按下以及灰化状态的位图单元,而改用三维风格的边框来表示这些状态NTBS_DRAWSEPARATOR绘制分隔条。默认情况下,工具栏上用来分隔按钮的分隔条是不会被绘制的,而只会加大两个按钮之间的间距。具有该风格之后,将绘制窄的分隔条3.2.11 属性表风格风格含义PSS_SIMPLE所有的属性页凸舌具有相同的宽度PSS_COMPACTTAB属性页凸舌的宽度取决于属性页标题文本的长度PSS_SCROLLABLE属性页凸舌的宽度取决于属性页标题文本的长度,当属性页凸舌的数目过多时,将自动出现左右箭头用来调节当前可见的属性页凸舌PSS_BOTTOM属性页凸舌显示在属性表的下方,可以和上面三种风格同时配合使用3.2.12 滚动型控件风格风格含义SVS_AUTOSORT对列表项进行自动排序，前提是先使用SVM_SETITEMCMP消息SVM_SETITEMCMP设置滚动型控件的列表项比较函数SVM_SORTITEMS来对列表项进行一次性的排序3.2.13 树型控件风格风格含义TVS_WITHICON使用图标来显示每项的折叠和展开状态,相应的图标可以在创建节点项时指定，没有该风格使用一个带方框的"+"号来表示一个折叠的节点项，用带方框的"-"号来表示展开的节点项TVS_SORT对节点项进行自动排序TVS_NOTIFY将在响应用户操作时产生相应的通知消息和通知码3.2.14 列表控件风格风格含义LVS_TREEVIEW支持以树型的方式来显示列表项LVS_UPNOTIFY指定列表型控件的在响应用户鼠标点击操作时的响应方式，默认情况下,如果没有指定LVS_UPNOTIFY风格,列表型控件将在鼠标按下时发出通知消息;如果指定了该风格,控件将在鼠标抬起时发出通知消息3.2.15 月历控件风格风格含义MCS_CHN控件以中文显示日期信息MCS_ENG_L以英文显示日期信息MCS_ENG_S以简写的英文格式显示MCS_NOTIFY将在响应用户操作时等情况下产生相应的通知消息3.2.16 旋钮控件风格风格含义SPS_AUTOSCROLL自动判断旋钮控件目前的滚动状态,在滚动到最大值和最小值时分别把向上和向下箭头禁止掉(变灰)，没有该风格的旋钮控件的滚动状态由应用程序掌握3.2.17 酷工具栏风格风格含义CBS_BMP_16X16酷工具栏的按钮项分别显示16x16的位图CBS_BMP_32X32酷工具栏的按钮项分别显示32x32的位图CBS_BMP_CUSTOM酷工具栏的按钮项使用自定义大小的位图CBS_USEBKBMP酷工具栏有背景位图3.2.18 动画控件风格风格含义ANS_AUTOLOOP使用该风格之后,动画控件将自动重复播放动画ANS_SCALED根据控件大小缩放动画对象ANS_FITTOANI根据动画对象大小调整控件尺寸3.2.19 独立滚动条风格风格含义SBS_HORZ创建一个水平滚动条。当没有指定SBS_BOTTOMALIGN或SBS_TOPALIGN,滚动条的范围根据CreateWindowEx2参数x,y,w,h决定SBS_VERT创建一个垂直滚动条。当没有指定SBS_LEFTALIGN或SBS_RIGHTALIGN,滚动条的范围根据CreateWindowEx2参数x,y,w,h决定SBS_BOTTOMALIGN与SBS_HORZ一起使用。放置水平滚动条在CreateWindowEx2指定范围的底部SBS_TOPALIGN与SBS_HORZ一起使用。放置水平滚动条在CreateWindowEx2指定范围的顶部SBS_LEFTALIGN与SBS_VERT一起使用。放置垂直滚动条在CreateWindowEx2指定范围的左边SBS_RIGHTALIGN与SBS_VERT一起使用,放置垂直滚动条在CreateWindowEx2指定范围的右边SBS_NOARROWS没有箭头,不能与SBS_NOSHAFT一起使用SBS_NOSHAFT没有shaft,不能与SBS_NOARROWS一起使用SBS_FIXEDBARLEN水平滚动条的thumb长度固定,或者垂直滚动条的thumb长度固定SBS_NOTNOTIFYPARENT向父窗口的通知发送方式不是发送通知码,而是发送消息;默认发送通知码4 通用窗口操作函数函数含义备注UpdateWindow立即更新某个窗口 ShowWindow显示或隐藏某个窗口 IsWindowVisible判断某个窗口是否可见控件和主窗口均可用EnableWindow使能或禁止某个窗口 IsWindowEnabled判断某个窗口是否可用 GetClientRect获取窗口客户区矩形 GetWindowRect获取窗口矩形屏幕坐标系中的窗口尺寸GetWindowBkColor获取窗口背景色 SetWindowBkColor设置窗口背景色 GetWindowFont获取窗口默认字体 SetWindowFont设置窗口默认字体 GetWindowCursor获取窗口光标 SetWindowCursor设置窗口光标 GetWindowStyle获取窗口风格 GetWindowExStyle获取窗口扩展风格 GetFocusChild获取拥有输入焦点的子窗口 SetFocusChild设置焦点子窗口 GetWindowCallbackProc获取窗口过程函数 SetWindowCallbackProc设置窗口过程函数 GetWindowAdditionalData获取窗口附加数据一 SetWindowAdditionalData设置窗口附加数据一 GetWindowAdditionalData2获取窗口附加数据二对话框和控件在内部已使用附加数据二,保留附加数据一给应用程序使用SetWindowAdditionalData2设置窗口附加数据二 GetWindowCaption获取窗口标题通常用于主窗口SetWindowCaption设置窗口标题 InvalidateRect使窗口的给定矩形区域无效将引发窗口重绘GetUpdateRect获取窗口当前的无效区域外包矩形 ClientToScreen将窗口客户区坐标转换为屏幕坐标 ScreenToClient将屏幕坐标转换为客户区坐标 WindowToScreen将窗口坐标转换为屏幕坐标 ScreenToWindow将屏幕坐标转换为窗口坐标 IsMainWindow判断给定窗口是否为主窗口 IsControl判断给定窗口是否为控件 IsDialog判断给定窗口是否为对话框 GetParent获取窗口的父窗口句柄主窗口的父窗口永远为HWND_DESKTOPGetMainWindowHandle返回包含某个窗口的主窗口句柄 GetNextChild获取下一个子窗口用于遍历某个窗口的所有子窗口GetNextMainWindow获取下一个主窗口句柄用于遍历所有主窗口GetHosting获取某个主窗口的托管窗口 GetFirstHosted获取某个主窗口的第一个被托管窗口用于遍历某个主窗口的所有被托管窗口GetNextHosted获取下一个被托管窗口 GetActiveWindow获取当前活动主窗口 SetActiveWindow设置当前活动主窗口 GetCapture获取当前捕获鼠标的窗口 SetCapture捕获鼠标 ReleaseCapture释放鼠标 MoveWindow移动窗口或改变窗口大小 ScrollWindow滚动窗口客户区的内容ScrollWindow函数可根据客户区的滚动情况自动调整窗口内子窗口的位置IncludeWindowStyle增加指定的窗口属性 ExcludeWindowStyle去除指定的窗口属性 GetNotificationCallback获取控件的通知消息回调函数在MiniGUI 1.2.6 版本中出现SetNotificationCallback设置控件的通知消息回调函数 SetTimer创建定时器指定的窗口会收到MSG_TIMER消息KillTimer删除定时器 DestroyAllControls销毁所有的子窗口 5 对话框操作函数函数含义备注GetDlgCtrlID根据控件句柄获取控件标识符 GetDlgItem根据控件标识符获取控件句柄 GetDlgItemInt获取控件文本并转换为整数值 SetDlgItemInt根据整数值设置控件文本 GetDlgItemText获取子控件文本功能同GetWindowTextGetDlgItemText2获取子控件文本根据文本长度自动分配内存,应用程序负责释放该内存SetDlgItemText设置子控件文本功能同SetWindowTextGetNextDlgGroupItem获取下一个同组子控件用于遍历同组控件,参阅WS_GROUP风格GetNextDlgTabItem获取下一个"TAB键停止"子控件用于TAB键游历控件,参阅WS_TABSTOP风格SendDlgItemMessage向子控件发送消息功能同SendMessageCheckDlgButton设置检查框子控件的选中状态 CheckRadioButton设置单选按钮子控件的选中状态 IsDlgButtonChecked检查子按钮是否选中 GetDlgDefPushButton获取当前默认子按钮 6 控件操作函数6.1 菜单操作函数函数含义备注CreateMenu创建一个空的菜单 InsertMenuItem添加菜单项 CreatePopupMenu创建弹出式菜单 TrackPopupMenu显示弹出式菜单 StripPopupHead删除弹出式菜单的头部 GetMenuItemInfo获得感兴趣的菜单项属性 SetMenuItemInfo设置感兴趣的菜单项属性 RemoveMenu从菜单中删除指定的菜单项如果菜单项含有子菜单,则会解除子菜单和该菜单项的关联,但并不删除子菜单DeleteMenu从菜单中删除指定的菜单项如果菜单项含有子菜单,则同时会删除子菜单DestroyMenu删除整个菜单 6.2 滚动条操作函数函数含义备注EnableScrollBar使能、禁止滚动条 SetScrollRange设置滚动条的滚动范围 SetScrollInfo设置滚动条的信息如果在调用SetScrollRange后,调用了影响滚动条位置的其他函数,则应该将bRedraw设定为FALSE以避免过多地重画6.3 键盘/鼠标操作函数函数含义备注GetShiftKeyStatus获取键状态值 GetKeyStatus确定键盘上某个键的状态 GetFocusChild获得某个窗口中具有输入焦点的子窗口的句柄 SetFocusChild父窗口可以调用该函数来把输入焦点赋予它的某个子窗口 SetCapture用该函数来使某个窗口捕获鼠标在某一时刻只能有一个窗口捕获鼠标ReleaseCapture恢复正常的鼠标处理方式 GetCapture确定当前哪个窗口捕获了鼠标 6.4 图标/光标操作函数函数含义备注LoadIconFromFile从一个Windows图标文件(*.ico)中载入图标,图标可以是单色、16色或256色的 LoadIconFromMem从内存中装载图标 DrawIcon装载完图标对象之后,就可以调用该函数在指定的位置绘制图标 DestroyIcon销毁图标句柄,并释放它所占用的内存 CreateIcon运行时动态创建图标，同样需要用DestroyIcon函数来销毁 GetLargeSystemIcon来获取内存中的系统图标来使用32x32像素的系统大图标GetSmallSystemIcon来获取内存中的系统图标来使用16x16像素的系统小图标LoadSystemIcon直接从MiniGUI.cfg配置文件中定义的图标文件中载入所需的系统图标实际上是通过调用 LoadIconFromFile来载入图标的，不再需要的时候也必须使用DestroyIcon函数来销毁LoadCursorFromFile从一个Windows光标文件中载入光标 LoadCursorFromMem从内存中读入光标 CreateCursor动态创建光标 DestroyCursor销毁由LoadCursorFromFile函数和CreateCursor函数创建的光标,并释放光标对象所占用的内存 GetCursorPos获取光标的当前屏幕位置 SetCursorPos把光标移动到屏幕上的指定位置 GetCurrentCursor获取当前光标句柄 SetCursorEx设置当前光标 SetCursor设置当前光标,不改变缺省光标 SetDefaultCursor把给定光标设置为当前光标和缺省光标 GetWindowCursor获取给定窗口的当前光标 SetWindowCursor设置新的窗口光标 GetSystemCursor获得的系统缺省光标GetSystemCursor(0)、GetSystemCursor(IDC_ARROW)是一样的ShowCursor显示或隐藏光标 ClipCursor把光标限定在屏幕的某个矩形区域内常用于响应某一特定的限制矩形区域内的事件GetClipCursor获取当前的光标限定矩形该函数可以用来在设置新的限定矩形之前保存原始限定矩形,需要时把它用于恢复原始区域6.4.1光标类型类型含义值IDC_ARROW系统缺省的箭头光标0IDC_IBEAM'I'形光标,指示输入区域1IDC_PENCIL笔形光标2IDC_CROSS十字光标3IDC_MOVE移动光标4IDC_SIZENWSE西北-东南方向的调整大小光标5IDC_SIZENESW东北-西南方向的调整大小光标6IDC_SIZEWE东西方向的调整大小光标7IDC_SIZENS南北方向的调整大小光标8IDC_UPARROW向上箭头光标9IDC_NONE空光标10IDC_HELP带问号光标11IDC_BUSY忙光标12IDC_WAIT等待光标13IDC_RARROW右箭头光标14IDC_COLOMN列光标15IDC_ROW行光标16IDC_DRAG拖动光标,用于拖放操作17IDC_NODROP不可放下光标,用于拖放操作18IDC_HAND_POINT手形指点光标19IDC_HAND_SELECT手形选择光标20IDC_SPLIT_HORZ水平分割光标21IDC_SPLIT_VERT垂直分割光标226.5 插入符操作函数函数含义备注CreateCaret创建一个插入符,并把它赋给指定的窗口 DestroyCaret销毁由创建的插入符 ShowCaret显示插入符 HideCaret把插入符隐藏掉 GetCaretPos获取插入符的所在位置 SetCaretPos在一个窗口之内移动插入符 GetCaretBlinkTime获取插入符的反转时间该时间以毫秒计数,系统缺省的插入符反转时间为500毫秒SetCaretBlinkTime定义插入符的反转时间插入符反转时间最小不能小于100毫秒6.6 剪贴板操作函数函数含义备注CreateClipBoard创建自定义的剪贴板，包括系统的最多有NR_CLIPBOARDS（4）个MiniGUI提供了一个默认的文本剪贴板,名字为CBNAME_TEXTDestroyClipBoard销毁自定义的剪贴板 SetClipBoardData把数据传送到指定的剪贴板 GetClipBoardDataLen获取剪贴板上数据的大小 GetClipBoardData把剪贴板上的数据复制到指定的数据缓冲区中 GetClipBoardByte从剪贴板数据的指定位置获取一个字节 6.7 配置文件操作函数函数含义备注GetValueFromEtcFile从指定的配置文件当中获取指定的键值,键值以字符串形式返回 GetIntValueFromEtcFile从指定的配置文件当中获取指定的整数型键值 SetValueToEtcFile将给定的键值保存到指定的配置文件当中如果配置文件不存在,则将新建配置文件LoadEtcFile把指定的配置文件读入内存,返回一个配置对象句柄 UnloadEtcFile释放内存中的配置文件信息 GetValueFromEtc使用方法和第一个函数类似注意第一个参数是句柄GetIntValueFromEtc使用方法和第二个函数类似注意第一个参数是句柄SetValueToEtc使用方法和第三个函数类似只改变内存中的配置值RemoveSectionInEtc从内存中的配置文件信息中删除指定的段信息 RemoveSectionInEtcFile从指定的配置文件当中删除指定的段信息 GetValueFromEtcSec从内存中的配置文件信息的指定段中获取指定的键值 GetIntValueFromEtcSec从内存中的配置文件信息的指定段中获取指定的整数型键值 SetValueToEtcSec保存键值到内存中的配置文件信息的指定段中 SaveEtcToFile将内存中的配置文件信息保存到指定的文件中 FindSectionInEtc在内存中的配置文件信息中查找指定的字段如果没有指定的字段存在,当参量bCreateNew为TRUE时将新建一空字段6.8 编辑框操作函数函数含义GetWindowTextLength获取文本的长度,以字节为单位GetWindowText获取编辑框中的文本SetWindowText设置编辑框中的文本内容7 消息的种类7.1 窗口消息消息含义MSG_NCCREATE消息在MiniGUI建立主窗口的过程中发送到窗口过程MSG_SIZECHANGING消息窗口尺寸发生变化时,或者建立窗口时发送到窗口过程MSG_SIZECHANGED消息在窗口尺寸发生变化后发送到窗口过程MSG_CSIZECHANGED消息是窗口客户区的尺寸发生变化后发送到窗口过程MSG_CREATE消息在窗口成功创建并添加到MiniGUI的窗口管理器之后发送到窗口过程MSG_FONTCHANGING当应用程序调用SetWindowFont改变窗口的默认字体时,将发送该消息到窗口过程MSG_FONTCHANGED当应用程序调用SetWindowFont改变了窗口的默认字体后,将发送该消息到窗口过程MSG_ERASEBKGND当系统需要清除窗口背景时,将发送该消息到窗口过程MSG_PAINT该消息在需要进行窗口重绘时发送到窗口过程MSG_CLOSE当用户点击窗口上的"关闭"按钮时, MiniGUI向窗口过程发 送MSG_CLOSE消息MSG_DESTROY消息在应用程序调DestroyMainWindow或者DestroyWindow时发送到窗口过程当中MSG_INITDIALOG消息是在MiniGUI根据对话框模板建立对话框以及控件之后,发送到对话框回调函数的MSG_COMMAND控件内部发生某种事件时,会通过通知消息通知其父窗口MSG_ACTIVEMENU在用户激活菜单栏中的某个弹出式菜单后, MiniGUI将给菜单栏所在的窗口过程发送MSG_ACTIVEMENU消息MSG_TIMER创建定时器后触发的消息一般来说,在以下情况下,MiniGUI程序的窗口过程会接收到一个MSG_PAINT 消息用户移动窗口或显示窗口时,MiniGUI向先前被隐藏的窗口发送 MSG_PAINT 消息程序使用InvalidateRect函数来更新窗口的无效区域,这将产生一个 MSG_PAINT 消息程序调用UpdateWindow函数来重绘窗口覆盖程序窗口的对话框或消息框被消除下拉或弹出菜单被消除7.2 键鼠消息消息含义MSG_KEYDOWN一个键被按下，如果用户按住某个键不放手，系统将会产生一系列按下的消息MGS_SYSKEYDOWN一个键被按下，如果用户按住某个键不放手，系统将会产生一系列按下的消息MSG_KEYUP释放一个键MGS_SYSKEYUP释放一个键MSG_CHAR字符键的字符消息MSG_KILLFOCUS系统向将要失去焦点的窗口发送该消息MSG_SETFOCUS发送给将要得到焦点的窗口MSG_LBUTTONDOWN鼠标左按钮被按下，MSG_NCLBUTTONDOWNMSG_LBUTTONUP鼠标左按钮被释放，MSG_NCLBUTTONUPMSG_RBUTTONDOWN鼠标右按钮被按下，MSG_NCRBUTTONDOWNMSG_RBUTTONUP鼠标右按钮被释放，MSG_NCRBUTTONUPMSG_LBUTTONDBLCLK鼠标左按钮被双击，MSG_NCLBUTTONDBLCLKMSG_RBUTTONDBLCLK鼠标右按钮被双击，MSG_NCRBUTTONDBLCLKMSG_HITTEST如果发生鼠标事件,系统会向含有光标热点的窗口或捕捉鼠标的窗口发送该消息，MSG_NCHITTESTMSG_MOUSEMOVE确定光标的当前位置MSG_SETCURSOR当用户移动鼠标时,MiniGUI 将把MSG_SETCURSOR消息发送给光标下面的窗口,光标应用程序可以在处理MSG_SETCURSOR消息时改变当前的光标7.3 控件消息7.3.1 滚动条消息消息含义MSG_VSCROLL垂直滚动条上下移动的消息MSG_HSCROLL水平滚动条左右移动的消息7.3.2 静态框消息消息含义STM_GETIMAGE返回位图的指针或者图标句柄STM_SETIMAGE通过wParam参数重新设置位图指针或者图标句柄,并且返回原来的指针7.3.3 按钮消息消息含义BM_GETCHECK查询复选框或者单选钮的选中状态BM_SETCHECK设置复选框或者单选钮的选中状态BM_GETSTATE查询普通按钮或者复选框的按下或释放状态BM_SETSTATE设置普通按钮或者复选框的按下或释放状态BM_GETIMAGE获取位图按钮上的位图或者图标BM_SETIMAGE设置位图按钮上的位图或者图标BM_CLICK发送BM_CLICK模拟用户鼠标的单击操作7.3.4 列表消息消息含义LB_ERRSPACE当列表框控件所能存储的内容超过了可用内存空间时返回该消息LB_ERR因为其他原因而出错返回该消息LB_OKAY操作成功返回该消息LB_ADDSTRING将新的字符串追加为列表框的最后一项LB_INSERTSTRING将字符串插入到列表框中的指定位置LB_DELETESTRING从列表框中删除指定的条目LB_RESETCONTENT清空列表框中的所有内容LB_GETCOUNT可获得列表框中的条目个数LB_GETTEXTLEN获得列表框中指定条目的字符串长度LB_GETTEXT将该条目复制到文字缓冲区中LB_SETTEXT设置列表框条目的字符串LB_GETITEMDATA获得列表框条目的其他信息，如位图对象或图标句柄、检查框状态LB_SETITEMDATA设置列表框条目的其他信息，如位图对象或图标句柄、检查框状态LB_SETCURSEL控制当前的选中项，对于多项选择列表框，只能用来设置当前高亮项LB_GETCURSEL获得当前选定的索引项，对于多项选择列表框，只能用来获取当前高亮项,无法获得所有具有选中状态的条目LB_SETSEL设定某特定条目的选择状态,而不影响其他项LB_GETSEL获取某特定条目的选择状态LB_GETSELCOUNT获得多选列表框中当前被选中的条目个数LB_GETSELITEMS获得所有被选中条目的索引值LB_FINDSTRING查找含有字符串的条目，返回模糊匹配字符串string的条目索引值LB_FINDSTRINGEXACT将进行严格精确匹配查找LB_GETCHECKMARK设置某条目的检查框的当前状态,如果没有找到相应条目,则返回LB_ERR,CMFLAG_CHECKED处于选择状态,CMFLAG_PARTCHECKED处于部分选择状态,CMFLAG_BLANK处于未选择状态LB_SETCHECKMARK指定索引处条目的检查框的状态为status中指定的值LB_SETITEMBOLD指定索引处条目的检查框的状态为加粗显示状态,根据lParam的值判断是否进行加粗设置,如果为1则加粗显示,为0则正常显示LB_GETITEMDISABLE获取指定索引处条目的检查框是否处于禁止选中状态，返回1表示该条目的检查框处于禁止选中状态，0表示该条目的检查框处于可选择状态LB_SETITEMDISABLE设置指定索引处条目的检查框的状态为禁止选中状态，根据lParam的值设置，为1则设置为禁止选中状态,为0则为可选择状态LB_MULTIADDITEM用于向列表框一次添加多个条目LB_SETSTRCMPFUNC重载默认的排序方式LB_SETITEMADDDATA设置附加的32位数据LB_GETITEMADDDATA获取附加的32位数据LB_SETITEMHEIGHT设定条目所占的高度LB_GETITEMHEIGHT返回条目所占的高度7.3.5 编辑框消息消息含义MSG_GETTEXTLENGTH获取文本的长度,以字节为单位MSG_GETTEXT获取编辑框中的文本MSG_SETTEXT设置编辑框中的文本内容EM_GETCARETPOS获得当前的插入符位置EM_SETCARETPOS设置插入符的位置EM_GETSEL获取当前被选中的文本EM_SETSEL设置当前被选中的文本EM_GETSELPOS获取当前的选择点位置EM_GETSELPOS用法和EM_GETCARETPOS消息类似EM_SELECTALL使编辑框所有的文本都被选中EM_COPYTOCB把编辑框控件当前选中的文本复制到剪贴板EM_CUTTOCB把剪贴板的文本内容剪切到编辑框EM_INSERTCBTEXT把剪贴板的文本内容复制到编辑框EM_GETLINEHEIGHT获取行的高度EM_SETLINEHEIGHT设置行的高度EM_GETLINECOUNT获取行的数量EM_LIMITTEXT设置编辑框控件的文本上限,以字节为单位EM_SETREADONLY在wParam参数传递TRUE,将使编辑框置于只读状态,而wParam参数传递FALSE,将使编辑框置于正常编辑状态EM_SETPASSWORDCHAR修改密码字符EM_GETPASSWORDCHAR获得当前的密码字符EM_SETTIPTEXT设置编辑框的提示文字EM_GETTIPTEXT获取编辑框的提示文字EM_SETTITLETEXT设置编辑框的标题文字EM_GETTITLETEXT获取编辑框的标题文字EM_SETLFDISPCHAR设置了用于行结束符的显示符号,编辑框将把行结束符显示为所设的显示符号EM_SETLINESEP改变编辑框使用的换行符号EM_GETNUMOFPARAGRAPHS获取文本的段落数目EM_GETPARAGRAPHLENGTH获取某个特定段落的长度,获取成功返回指定段落的长度,失败返回-1EM_GETPARAGRAPHTEXT获取特定段落的文本7.3.6 组合框消息消息含义CB_ADDSTRING用来向内部列表框中添加条目CB_INSERTSTRING用来向内部列表框中插入条目CB_DELETESTRING用来从内部列表框中删除条目CB_FINDSTRING用于模糊匹配列表框中的条目CB_FINDSTRINGEXACT用于精确匹配列表框中的条目CB_GETCOUNT用于获取内部列表框中的条目个数CB_GETCURSEL用于获取内部列表框的当前选中项CB_SETCURSEL用于设置内部列表框的选中项CB_RESETCONTENT用于清空内部列表框CB_GETITEMADDDATA用于获取内部列表框条目的附加数据CB_SETITEMADDDATA用于设置内部列表框条目的附加数据CB_GETITEMHEIGHT用于获取内部列表框条目的高度CB_SETITEMHEIGHT用于设置内部列表框条目的高度CB_SETSTRCMPFUNC用于设置内部列表框排序用的字符串对比函数CB_GETLBTEXT用于获取内部列表框条目的文本内容CB_GETLBTEXTLEN用于获得内部列表框条目的文本长度CB_GETCHILDREN获得组合框的子控件,wParam返回编辑框控件指针,lParam返回列表框控件指针CB_LIMITTEXT用于限制内部编辑框的文本长度CB_SETEDITSEL用来设置编辑框选中的文本CB_GETEDITSEL用来获取编辑框选中的文本CB_SPIN发送该消息将使旋钮框向前或向后步进,相当于用户单击编辑框旁边的向上或向下箭头(在编辑框中键入向上或向下箭头键,也可取得一样的效果)。wParam控制步进方向,取0为向下,取1为向上CB_FASTSPIN发送该消息将使旋钮框快速向前步进,相当于用户在编辑框中键入PageUp/PageDown键。wParam控制步进方向,取0为向上,取1为向下CB_GETDROPPEDCONTROLRECT获得组合框的下拉列表对应矩形位置CB_GETDROPPEDSTATE检查组合框的下拉列表是否为显示状态CB_GETSPINRANGE获得可取的最大值和最小值,它们分别存储在wParam参数和lParam参数指向的地址中CB_SETSPINRANGE设定可取的最大值和最小值,分别取wParam参数和lParam参数的值CB_SETSPINVALUE参数设置编辑框的当前数值,通过wParam参数传递要设置的值CB_GETSPINVALUE该消息返回当前编辑框内的数值CB_SPIN发送该消息将使旋钮框向前或向后步进,相当于用户单击编辑框旁边的向上或向下箭头(在编辑框中键入向上或向下箭头键,也可取得一样的效果)。wParam控制步进方向,取1为向上,取0为向下。步进值取决于CB_SETSPINPACE的设置值CB_FASTSPIN发送该消息将使旋钮框快速向前步进,相当于用户在编辑框中键入PageUp/PageDown键。wParam控制步进方向,取0为向上,取1为向下。步进值取决于CB_SETSPINPACE的设置值CB_GETSPINPACE获得步进值(wParam)和快速步进值(lParam)CB_SETSPINPACE设置步进值(wParam)和快速步进值(lParam)CB_SETSPINFORMAT设定整数的格式化字符串。MiniGUI 在内部使用sprintf和sscanf函数在编辑框的文本字符串和整数值之间互相转换。设定格式化字符串之后,MiniGUI在调用sprintf和sscanf函数时将使用这个格式化字符串,使之具有特定的显示格式7.3.7 菜单按钮消息消息含义MBM_ADDITEM向菜单按钮添加条目，当内存空间不足时,则返回MB_ERR_SPACEMBM_DELITEM从菜单按钮中删除条目MBM_RESETCTRL删除所有条目MBM_SETCURITEM设置选中条目,被选中的条目文本将显示在菜单按钮上MBM_GETCURITEM获得当前选中条目的索引号MBM_GETITEMDATA获取菜单项条目的数据MBM_SETITEMDATA设置菜单项条目的数据MBM_SETSTRCMPFUNC设定一个定制的排序函数7.3.8 进度条消息消息含义PBM_SETRANGE设置进度条的范围，默认情况下的进度条范围是0到100PBM_SETSTEP设置步进长度，默认的进度条步进值是10，当进度条的步进值为负值时,需要设置进度条的位置为进度条范围的最大值PBM_SETPOS设置进度条位置PBM_DELTAPOS在当前进度基础上偏移PBM_STEPIT使进度条前进一个步进值7.3.9 滑块消息消息含义TBM_SETRANGE通过wParam和lParam参数分别设置滑块的最小值和最大值。默认的范围是0~10TBM_GETMIN获得滑块的最小值TBM_GETMAX获得滑块的最大值TBM_SETMIN设置滑块的最小值TBM_SETMAX设置滑块的最大值TBM_SETLINESIZE通过wParam参数设置滑块的步进值。当用户在滑块拥有输入焦点时按下向上或向下光标键,将使滑块向上或向下移动该步进值。默认的步进值是1TBM_GETLINESIZE获得滑块的步进值TBM_SETPAGESIZE通过wParam参数设置滑块的快速步进值。当用户在滑块拥有输入焦点时按下PageUp和PageDown键,将使滑块分别向上或向下移动该快速步进值。默认的快速步进值是5TBM_GETPAGESIZE获得滑块的快速步进值TBM_SETPOS设置滑块的位置TBM_GETPOS获得滑块的位置TBM_SETTICKFREQ设置刻度间距,默认间距是1TBM_GETTICKFREQ获得刻度间距TBM_SETTIP设置最小值及最大值处的文字说明TBM_GETTIP获取最小值及最大值处的文字说明7.3.10 工具栏消息消息含义NTBM_ADDITEM向工具栏中添加一个工具项NTBM_GETITEM获取具有指定标识符的工具项信息NTBM_SETITEM设置具有指定标识符的工具项信息NTBM_ENABLEITEM使能或者禁止某个具有指定标识符的工具项NTBM_SETBITMAP改变工具栏上的按钮位图7.3.11 属性表消息消息含义PSM_ADDPAGE向属性表中添加属性页MSG_INITPAGE类似对话框的MSG_INITDIALOG消息MSG_SHOWPAGE在属性页被隐藏和重新显示时发送到属性页过程中PSM_SHEETCMD属性表控件将向其拥有的所有属性页广播MSG_SHEETCMD消息PSM_REMOVEPAGE删除某个属性页PSM_GETPAGE获得具有某个索引值的属性页的窗口句柄PSM_GETPAGEINDEX根据属性页句柄返回属性页索引值PSM_GETPAGECOUNT返回属性页总个数PSM_GETTITLELENGTH根据wParam参数传入的属性页索引值获得该属性页标题的长度,类似窗口的MSG_GETTEXTLENGTH消息PSM_GETTITLE根据wParam参数传入的属性页索引值获得该属性页标题,并保存在lParam参数传递的缓冲区中,类似窗口的 MSG_GETTEXT消息PSM_SETTITLE根据lParam参数传入的文本字符串设置由wParam指定的属性页标题,类似窗口的MSG_SETTEXT消息PSM_GETACTIVEPAGE返回活动属性页的窗口句柄PSM_GETACTIVEINDEX返回活动属性页的索引值PSM_SETACTIVEINDEX根据wParam传入的属性页索引值设置活动属性页7.3.12 滚动窗口消息消息含义SVM_SETCONTRANGE设置滚动窗口的内容区域的大小SVM_SETCONTWIDTH设置滚动窗口的宽度SVM_SETCONTHEIGHT设置滚动窗口的高度SVM_GETCONTWIDTH获取内容区域的宽度SVM_GETCONTHEIGHT获取内容区域的高度SVM_GETVISIBLEWIDTH获取内容区域的可视区域宽度SVM_GETVISIBLEHEIGHT获取内容区域的可视区域高度SVM_GETCONTENTX获取内容区域的当前位置X值SVM_GETCONTENTY获取内容区域的当前位置Y值SVM_SETCONTPOS设置内容区域的当前位置值,也就是在可视区域中移动内容区域到某个指定位置SVM_MAKEPOSVISIBLE使内容区域中的某个位置点成为可见SVM_GETHSCROLLVAL获取滚动窗口的当前水平滚动值SVM_GETVSCROLLVAL获取滚动窗口的当前垂直滚动值SVM_GETHSCROLLPAGEVAL获取滚动窗口的当前水平页滚动值SVM_GETVSCROLLPAGEVAL获取滚动窗口的当前垂直页滚动值SVM_SETSCROLLVAL设置滚动窗口的水平和垂直滚动值SVM_SETSCROLLPAGEVAL设置滚动窗口的水平和垂直页滚动值SVM_ADDCTRLS往其中添加子控件SVM_RESETCONTENT重置滚动窗口控件,包括清空其中的子控件和设置内容区域的范围和位置值为默认值SVM_GETCTRL获取滚动窗口控件中的子控件的句柄SVM_GETFOCUSCHILD获取滚动窗口控件中具有键盘焦点的子控件SVM_SETCONTAINERPROC设置新的容器窗口过程,从而达到定制滚动窗口的目的7.3.13 滚动型控件消息消息含义SVM_SETITEMDRAW设置列表项的绘制函数SVM_SETITEMOPS设置列表项相关操作的一些回调函数,包括初始化、绘制和结束函数SVM_ADDITEM添加一个列表项SVM_DELITEM删除一个列表项SVM_REFRESHITEM刷新一个列表项区域SVM_GETITEMADDDATA获取列表项的附加数据SVM_SETITEMADDDATA设置列表项的附加数据SVM_GETITEMCOUNT获取当前列表项的数量SVM_RESETCONTENT删除掉控件中所有的列表项SVM_SETCURSEL设置控件的高亮列表项SVM_GETCURSEL获取控件的当前高亮列表项SVM_SELECTITEM设置列表项的选中状态SVM_SHOWITEM显示一个列表项SVM_CHOOSEITEM是SVM_SELECTITEM和SVM_SHOWITEM消息的组合,用来选中一个列表项并使之可见MSG_FREEZE在操作之前冻结控件,操作之后解冻SVM_SETMARGINS对滚动型控件的边缘范围进行设置SVM_GETMARGINS获取滚动型控件的边缘范围值SVM_GETLEFTMARGIN获取左边缘值SVM_GETTOPMARGIN获取上边缘值SVM_GETRIGHTMARGIN获取右边缘值SVM_GETBOTTOMMARGIN获取下边缘值7.3.14 树型控件消息消息含义TVM_ADDITEM插入一个节点项TVM_DELTREE删除一个节点及其所有子项(包括子项的子项)TVM_GETITEMINFO获取某个节点项的属性信息TVM_SETITEMINFO设置某个节点项的属性TVM_GETITEMTEXT获取某个节点项的文字标题TVM_GETITEMTEXTLEN获取节点项的文字标题的长度TVM_SETSELITEM选择某个节点项TVM_GETSELITEM获取当前被选择的节点项TVM_GETROOT获取树型控件的根节点TVM_GETRELATEDITEM获取指定节点的相关节点项TVIR_PARENT获取item节点的父节点TVIR_FIRSTCHILD获取item节点的第一个子节点TVIR_NEXTSIBLING获取item节点的下一个兄弟节点TVIR_PREVSIBLING获取item节点的前一个兄弟节点TVM_SEARCHITEM查找某个特定的节点项，整个节点树中查找TVM_FINDCHILD查找节点项的特定子节点，只在子节点中查找TVM_SETSTRCMPFUNC设置新的树型控件字符串比较函数7.3.15 列表型控件消息消息含义LVM_ADDCOLUMN添加一列或依次添加多列LVM_GETCOLUMN获取列表型控件中某一列的属性LVM_SETCOLUMN设置和修改列的各项属性LVM_MODIFYHEAD是LVM_SETCOLUMN的简化,可以用来设置列表头的标题LVM_GETCOLUMNWIDTH获取某列的宽度LVM_GETCOLUMNCOUNT获取列表型控件中列的数量LVM_DELCOLUMN删除列表型控件中的一列LVM_SETHEADHEIGHT设置列表头的高度LVM_ADDITEM往列表型控件中添加列表项LVM_FILLSUBITEM设置列表项中各个子项的内容LVM_SETSUBITEM设置列表项中各个子项的内容LVM_GETITEM获取一个列表项的信息LVM_GETITEMCOUNT获取列表型控件的列表项数量LVM_GETITEMADDDATA获取列表项的附加数据LVM_SETITEMADDDATA设置列表项的附加数据LVM_SETITEMHEIGHT设置一个列表型控件的列表项高度，如果不设置的话,列表型控件的列表项高度将采用缺省值LVM_DELITEM在列表型控件中删除一个列表项LVM_DELALLITEM删除所有的列表项LVM_GETSUBITEMTEXT获取子项的文字内容LVM_SETSUBITEMTEXT设置子项的文字内容LVM_GETSUBITEMLEN获取子项字符串的长度LVM_SETSUBITEMCOLOR设置子项的文字颜色LVM_SELECTITEM选择一个列表项,被选中的项将高亮显示LVM_GETSELECTEDITEM用来确定当前被选中的列表项LVM_SHOWITEM使一个列表项在列表型控件中成为可见的条目LVM_CHOOSEITEM是LVM_SELECTIEM和LVM_SHOWITEM功能的组合,它使一个列表项被选中而且成为可见的项LVM_FINDITEM在列表型控件中查找一个特定的列表项LVM_SETCOLUMN设置新的比较函数LVM_SORTIEMS使之对列表项进行排序LVM_COLSORT使列表型控件依据某列来进行比较排序LVM_SETSTRCMPFUNC设置自定义的字符串比较函数LVM_GETRELATEDITEM获取一个节点的相关树型节点LVM_GETRELATEDITEM返回所获取到的相关节点的句柄LVM_FOLDITEM折叠或者展开一个包含子节点的节点项7.3.16 月历控件消息消息含义MCM_GETCURDAY获取当前选择的日期中是当月中的第几天MCM_GETCURMONTH获取当前选择的日期中的月份值MCM_GETCURYEAR获取当前选择日期中的年份MCM_GETFIRSTWEEKDAY确定当前月份中的第一天是星期几MCM_GETCURDATE获取月历控件中当前选择的日期MCM_GETTODAY获取"今天"的日期MCM_SETCURDAY设置当前选择的"天"MCM_SETCURMONTH设置当前的月MCM_SETCURYEAR设置当前的年MCM_SETCURDATE设置当前选择的日期MCM_SETTODAY把"今天"设为当前选择的日期MCM_GETCOLOR获取月历控件中各部分的颜色设置MCM_SETCOLOR改变月历控件中各部分的颜色设置MCM_GETMINREQRECTW获取最小宽度值MCM_GETMINREQRECTH获取最小高度值7.3.17 旋钮控件消息消息含义SPM_SETINFO设置控件的属性和状态SPM_GETINFO获取旋钮控件的属性SPM_SETCUR设置旋钮控件的当前位置值SPM_GETCUR获取当前的位置值SPM_DISABLEDOWN禁止下箭头的滚动能力，仅对没有SPS_AUTOSCROLL风格的旋钮控件有效SPM_ENABLEDOWN恢复下箭头的滚动能力，仅对没有SPS_AUTOSCROLL风格的旋钮控件有效SPM_DISABLEUP禁止上箭头的滚动能力，仅对没有SPS_AUTOSCROLL风格的旋钮控件有效SPM_ENABLEUP恢复上箭头的滚动能力，仅对没有SPS_AUTOSCROLL风格的旋钮控件有效SPM_SETTARGET设置旋钮控件的目标窗口SPM_GETTARGET获取旋钮控件的目标窗口7.3.18 网格控件消息消息含义GRIDM_ADDCOLUMN往控件中增加列GRIDM_ADDCOLUMN增加网格控件的一列GRIDM_DELCOLUMN删除网格控件中的一列GRIDM_GETCOLWIDTH获取控件列的宽度GRIDM_GETCOLCOUNT获取网格控件中列的数量GRIDM_SETROWHEIGHT设置控件行的高度GRIDM_GETROWHEIGHT获取控件行的高度GRIDM_ADDROW往网格控件中添加一行GRIDM_DELROW删除网格控件中的一行GRIDM_GETROWCOUNT获取网格控件中行的数量GRIDM_SETCELLPROPERTY设置一个或多个单元格GRIDM_GETCELLPROPERTY获得单元格的属性GRIDM_SETNUMFORMAT设置数字单元格(GRIDCELLDATANUMBER)的数字格式GRIDM_SETSELECTED设置高亮的单元格GRIDM_GETSELECTED得到所有高亮的单元格GRIDM_ADDDEPENDENCE往网格控件中添加一个单元格关联GRIDM_DELDEPENDENCE删除网格控件中已有的一个单元格关联7.3.18 酷工具栏消息消息含义CBM_ADDITEM往工具栏中添加按钮项CBM_ENABLE禁止或恢复某个按钮项7.3.19 动画控件消息消息含义ANM_SETANIMATION设置ANIMATION对象ANM_GETANIMATION获取当前的ANIMATION对象ANM_STARTPLAY开始播放。在发送ANM_STARTPLAY消息给动画控件之前,动画控件将仅仅显示ANIMATION对象的第一帧图象;只有发送了ANM_STARTPLAY消息之后,动画控件才会按ANIMATION对象中的信息播放动画ANM_PAUSE_RESUME暂停/继续播放。用来暂停动画的播放(正在播放时),或者用来继续动画的播放(已被暂停时)ANM_STOPPLAY停止动画的播放。动画控件将返回到ANIMATION的第一帧图象7.3.20 图标型控件消息消息含义IVM_ADDITEM往该控件中添加图标项IVM_RESETCONTENT对应SVM_RESETCONTENT,用于清空图标型控件中的图标项IVM_DELITEM对应SVM_DELITEM,用于删除图标型控件中的图标项IVM_SETITEMDRAW对应SVM_SETITEMDRAW,用于设置图标项的绘制函数IVM_SETCONTWIDTH对应SVM_SETCONTWIDTH,用于设置滚动窗口的宽度IVM_SETCONTHEIGHT对应SVM_SETCONTHEIGHT,用于设置滚动窗口的高度IVM_SETITEMOPS对应SVM_SETITEMOPS,用于设置图标项相关操作的一些回调函数IVM_GETMARGINS对应SVM_GETMARGINS,用于获取图标型控件的边缘范围值IVM_SETMARGINS对应SVM_SETMARGINS,用于设置图标型控件的边缘范围值IVM_GETLEFTMARGIN对应SVM_GETLEFTMARGIN,用于获取图标型控件中的左边缘值IVM_GETTOPMARGIN对应SVM_GETTOPMARGIN,用于获取图标型控件中的上边缘值IVM_GETRIGHTMARGIN对应SVM_GETRIGHTMARGIN,用于获取图标型控件中的右边缘值IVM_GETBOTTOMMARGIN对应SVM_GETBOTTOMMARGIN,用于获取图标型控件中的下边缘值IVM_GETCONTWIDTH对应SVM_GETCONTWIDTH,用来获取内容区域的宽度IVM_GETCONTHEIGHT对应SVM_GETCONTHEIGHT,用来获取内容区域的高度IVM_GETVISIBLEWIDTH对应SVM_GETVISIBLEWIDTH,用来获取可视区域的宽度IVM_GETVISIBLEHEIGHT对应SVM_GETVISIBLEHEIGHT,用来获取可视区域的高度IVM_SETCONTRANGE对应SVM_SETCONTRANGE,用于设置滚动窗口的内容区域的大小IVM_GETCONTENTX对应SVM_GETCONTENTX,用于获取内容区域的当前位置值IVM_GETCONTENTY对应SVM_GETCONTENTY,用于获取内容区域的当前位置值IVM_SETCONTPOS对应SVM_SETCONTPOS,用于设置内容区域的当前位置值,也就是在可视区域中移动内容区域到某个指定位置IVM_GETCURSEL对应SVM_GETCURSEL,用于获取控件的当前高亮图标项IVM_SETCURSEL对应SVM_SETCURSEL,用于设置控件的当前高亮图标项IVM_SELECTITEM对应SVM_SELECTITEM,用于选择一个列表项,被选中的项将高亮显示IVM_SHOWITEM对应SVM_SHOWITEM,用于显示一个图标项IVM_CHOOSEITEM对应SVM_CHOOSEITEM,是IVM_SELECTITEM和IVM_SHOWITEM消息的组合,用来选中一个图标项并使之可见IVM_SETITEMINIT对应SVM_SETITEMINIT,用于设置图标项的初始操作IVM_SETITEMDESTROY对应SVM_SETITEMDESTROY,用于设置图标项的销毁操作IVM_SETITEMCMP对应SVM_SETITEMCMP,用于设置图标型控件图标项的比较函数IVM_MAKEPOSVISIBLE对应VM_MAKEPOSVISIBLE,用于使内容区域中的某个位置点成为可见IVM_GETHSCROLLVAL对应SVM_GETHSCROLLVAL,用来获取滚动窗口的当前水平滚动值(点击滚动条箭头的滚动范围大小)IVM_GETVSCROLLVAL对应SVM_GETVSCROLLVAL,用来获取滚动窗口的当前垂直滚动值(点击滚动条箭头的滚动范围大小)IVM_GETHSCROLLPAGEVAL对应SVM_GETHSCROLLPAGEVAL,用来获取滚动窗口的当前水平页滚动值(翻页操作时的滚动范围大小)IVM_GETVSCROLLPAGEVAL对应SVM_GETVSCROLLPAGEVAL,用来获取滚动窗口的当前垂直页滚动值(翻页操作时的滚动范围大小)IVM_SETSCROLLVAL对应SVM_SETSCROLLVAL,用于设置滚动窗口的水平和(或者)垂直滚动值IVM_SETSCROLLPAGEVAL对应SVM_SETSCROLLPAGEVAL,用于设置滚动窗口的水平和(或者)垂直页滚动值IVM_SORTITEMS对应SVM_SORTITEMS,用于对图标项进行一次性的排序IVM_GETITEMCOUNT对应SVM_GETITEMCOUNT,用于获取当前图标项的数量IVM_GETITEMADDDATA对应SVM_GETITEMADDDATA,用于获取当前图标项的附加信息IVM_SETITEMADDDATA对应SVM_SETITEMADDDATA,用于设置当前图标项的附加信息IVM_REFRESHITEM对应SVM_REFRESHITEM,用于刷新一个图标项区域IVM_GETFIRSTVISIBLEITEM对应SVM_GETFIRSTVISIBLEITEM,用于获取第一个可见的图标项7.3.21 独立滚动条消息消息含义SBM_GETSCROLLINFO获取滚动条控件的最大值、最小值SBM_SETSCROLLINFO进行滚动条信息设置SBM_GETPOS获取当前游标的位置SBM_SETPOS设置当前游标的位置SBM_GETRANGE获取滚动条滚动范围SBM_SETRANGE设置滚动条滚动范围SBM_SETRANGEREDRAW设置滚动条滚动范围,并立即重绘SBM_ENABLE_ARROW启用或者禁用滚动条箭头8 通知码8.1 滚动条通知码标识符含义SB_LINEUP鼠标点击竖直按钮的上箭头1次SB_LINEDOWN鼠标点击竖直滚动条的下箭头1次SB_LINELEFT鼠标点击水平滚动条的左箭头1次SB_LINERIGHT鼠标点击水平滚动条的右箭头1次SB_PAGEUP鼠标点击竖直按钮的上箭头与滑块之间的区域1次SB_PAGEDOWN鼠标点击竖直按钮的下箭头与滑块之间的区域1次SB_PAGELEFT鼠标点击水平按钮的左箭头与滑块之间的区域1次SB_PAGERIGHT鼠标点击水平按钮的右箭头与滑块之间的区域1次SB_THUMBTRACK鼠标拖动滑块移动时窗口不断地收到的消息,注意,该值表示对鼠标位置经换算后对应的数值(通过lParam传递的),该值有可能大于设置的最大值,也有可能<小于设置的最小值,在程序中需要作相应的判断SB_THUMBPOSITION用户拖动滑块结束8.2 静态框通知码标识符含义STN_DBLCLK用户在静态框内双击了鼠标左键STN_CLICKED用户在静态框内单击了鼠标左键8.3 按钮通知码标识符含义BN_CLICKED表明用户单击此按钮BN_PUSHED表明用户将此按钮按下BN_UNPUSHED表明用户将此按钮释放BN_DBLCLK表明用户在此按钮上进行了鼠标左键的双击操作BN_SETFOCUS表明按钮获得了输入焦点BN_KILLFOCUS表明按钮失去了输入焦点8.4 列表通知码标识符含义LBN_ERRSPACE内存分配失败LBN_SELCHANGE单项选择列表框的当前选择项发生变化LBN_CLICKED用户在列表框某条目上单击了鼠标左键LBN_DBLCLK用户在列表框某条目上双击了鼠标左键LBN_SELCANCEL用户取消了某个条目的选择LBN_SETFOCUS列表框获得了输入焦点LBN_KILLFOCUS列表框失去了输入焦点LBN_CLICKCHECKMARK用户单击了条目的检查框LBN_ENTER用户在列表框中按下ENTER键8.5 编辑框通知码标识符含义EN_SETFOCUS编辑控件已经获得输入焦点EN_KILLFOCUS编辑控件已经失去输入焦点EN_CHANGE编辑控件的内容已经改变EN_UPDATE编辑控件在接收到MSG_SETTEXT,EM_RESETCONTENT或EM_SETLINEHEIGHT消息后,内容已经改变EN_ENTER用户在编辑框中按下了Enter键EN_MAXTEXT编辑控件在插入时超出了限定长度EN_DBLCLK编辑控件被鼠标左键双击EN_CLICKED编辑控件被鼠标左键点击8.6 组合框通知码标识符含义CBN_ERRSPACE内存不足CBN_SELCHANGE条目选择变化CBN_EDITCHANGE方框区域的文本发生了变化CBN_DBLCLK用户双击了组合框中的某个条目CBN_CLICKED用户点击了组合框CBN_SETFOCUS组合框获得了输入焦点。如果组合框具有CBS_AUTOFOCUS风格,则内部编辑框将同时获得输入焦点CBN_KILLFOCUS组合框失去了输入焦点CBN_DROPDOWN用户下拉列表框使之显示。当用户点击编辑框旁边的向下箭头按钮或者在编辑框中键入光标控制键,比如向下、向上箭头键,PageDown或者PageUp等键时,也会下拉并显示列表框CBN_CLOSEUP下拉的列表框被隐藏(关闭)CBN_SELENDOK用户从下拉列表框中选择了某个条目CBN_SELENDCANCEL用户未选择任何条目而关闭下拉列表框8.7 菜单按钮通知码标识符含义MBN_ERRSPACE内存分配失败,存储空间不足MBN_SELECTED对菜单按钮控件进行了选择。不管前后选择的菜单项是否改变,均会产生该通知消息MBN_CHANGED菜单按钮控件的选择项发生了变化MBN_STARTMENU用户激活了菜单按钮的弹出式菜单MBN_ENDMENU弹出式菜单关闭8.8 进度条通知码标识符含义PBN_REACHMAX已到达最大进度位置PBN_REACHMIN已到达最小进度位置8.9 滑块通知码标识符含义TBN_CHANGE滑块的位置发生了变化TBN_REACHMAX已到达了上限TBN_REACHMIN已到达了下限8.10 属性表通知码标识符含义PSN_ACTIVE_CHANGED当属性表中的活动属性页发生变化时,属性表控件将产生该通知消息8.11 滚动型控件通知码标识符含义SVN_SELCHANGED当前高亮列表项发生改变SVN_CLICKED用户点击列表项SVN_SELCHANGING当前高亮列表项正发生改变8.12 树型控件通知码标识符含义TVN_SELCHANGE当前选择的节点项发生改变TVN_DBLCLK用户双击节点项TVN_SETFOCUS树型控件获得焦点TVN_KILLFOCUS树型控件失去焦点TVN_CLICKED用户单击节点项TVN_ENTER用户按下回车键TVN_FOLDED节点项被折叠TVN_UNFOLDED节点项被展开8.13 列表型控件通知码标识符含义LVN_ITEMRDOWN用户鼠标右键在列表项上按下LVN_ITEMRUP用户鼠标右键在列表项上抬起LVN_HEADRDOWN用户鼠标右键在表头上按下LVN_HEADRUP用户鼠标右键在表头上抬起LVN_KEYDOWN键按下LVN_ITEMDBCLK用户双击某个列表项LVN_ITEMCLK用户单击某个列表项(保留)LVN_SELCHANGE当前选择的列表项改变LVN_FOLDED用户鼠标点击某个列表项,使之折叠LVN_UNFOLDED用户鼠标点击某个列表项,使之展开LVN_SELCHANGE鼠标右键在列表项上按下时,该项将被选中LVN_ITEMRDOWN鼠标右键在列表项上按下时,该项将被选中8.14 月历控件通知码标识符含义MCN_DATECHANGE当用户点击月历控件并造成当前日期发生改变时8.15 旋钮控件通知码标识符含义SPN_REACHMAX旋钮控件在大于等于最大位置时SPN_REACHMIN旋钮控件在小于等于最小位置时8.16 网格控件通知码标识符含义GRIDN_HEADLDOWN用户鼠标左键在表头上按下GRIDN_HEADLUP用户鼠标左键在表头上抬起GRIDN_KEYDOWN键按下GRIDN_CELLDBCLK用户双击某个单元格GRIDN_CELLCLK用户单击某个单元格GRIDN_FOCUSCHANGED当前选择的单元格改变GRIDN_CELLTEXTCHANGED单元格内容改变8.17 图标型控件通知码标识符含义LVN_SELCHANGE对应SVN_SELCHANGE,当前高亮图表项发生改变LVN_CLICKED对应SVN_CLICKED,用户点击图标项8.18 独立滚动条通知码标识符含义SB_LINEUP垂直滚动条向上滚一行SB_LINEDOWN垂直滚动条向下滚一行SB_PAGEUP垂直滚动条向上滚一页SB_PAGEDOWN垂直滚动条向下滚一页SB_LINELEFT水平滚动条向左滚一列SB_LINERIGHT水平滚动条向右滚一列SB_PAGELEFT水平滚动条向左滚一列页SB_PAGERIGHT水平滚动条向右滚一页SB_THUMBPOSITION当游标被鼠标左键按住拖动,然后释放,此时的游标位置将由此通知码传给父窗口SB_THUMBTRACK当游标被鼠标左键按住,在拖动游标的过程中,游标的位置将由此通知码不断的传给父窗口SB_TOP游标到了水平滚动条的最左边或者是垂直滚动条的最上边,即到了滚动条的最小值SB_BOTTOM游标到了水平滚动条的最右边或者是垂直滚动条的最下边,即到了滚动条的最大值9 发送和投递消息9.1 窗口消息函数函数含义PostMessage该函数将消息放到指定窗口的消息队列后立即返回。这种发送方式称为"邮寄"消息。如果消息队列中的邮寄消息缓冲区已满,则该函数返回错误值。在下一个消息循环中,由GetMessage函数获得这个消息之后,窗口才会处理该消息PostMessage一般用于发送一些非关键性的消息。比如在MiniGUI中,鼠标和键盘消息就是通过PostMessage函数发送的SendMessage应用程序一般通过发送一条消息来通知窗口过程立即完成某项任务。该函数和PostMessage函数不同,它把一条消息发送给指定窗口的窗口过程,而且等待该窗口过程完成消息的处理之后才会返回。当需要知道某个消息的处理结果时,使用该函数发送消息,然后根据其返回值进行处理。在MiniGUI-Threads当中,如果发送消息的线程和接收消息的线程不是同一个线程,发送消息的线程将阻塞并等待另一个线程的处理结果,然后继续运行;如果发送消息的线程和接收消息的线程是同一个线程,则与MiniGUI-Processes的SendMessage一样,直接调用接收消息窗口的窗口过程函数SendNotifyMessage该函数和PostMessage消息类似,也是不等待消息被处理即返回。但和PostMessage消息不同,通过该函数发送的消息不会因为缓冲区满而丢失,因为系统采用链表的形式处理这种消息。通过该函数发送的消息称为"通知消息",一般用来从控件向其父窗口发送通知消息PostQuitMessage该消息在消息队列中设置一个QS_QUIT标志。GetMessage在从指定消息队列中获取消息时,会检查该标志,如果有QS_QUIT标志,GetMessage消息将返回FALSE,从而可以利用该返回值终止消息循环BroadcastMessage该函数将指定消息广播给桌面上的所有主窗口ThrowAwayMessages该函数丢弃和指定窗口相关的消息队列中的所有消息,并返回所丢弃的消息个数。WaitMessage该函数等待主窗口消息队列中的消息,消息队列中一有消息就返回。不同于GetMessage,这个函数并不从消息队列中移走消息TranslateMessage把击键消息转换为MSG_CHAR消息,然后直接发送到窗口过程函数DispatchMessage最终把消息发往消息的目标窗口的窗口过程GetMessage调用从应用程序的消息队列中取出一个消息NotifyParentEx发送控件通知消息10.2 进程/线程间通信10.2.1 异步事件处理MAX_NR_LISTEN_FD 宏定义了系统能够监听的最多文件描述符数,默认定义为5函数含义RegisterListenFD函数在系统当中注册一个需要监听的文件描述符,并指定监听的事件类型(type参数,可取POLLIN、POLLOUT或者POLLERR),接收MSG_FDEVENT消息的窗口句柄以及一个上下文信息UnregisterListenFD函数注销一个被注册的监听文件描述符10.2.2 简单请求/应答处理函数含义ClientRequest向服务器发送请求ServerSendReply将结果发送给客户RegisterRequestHandler服务器可以通过调用该函数注册一些请求处理函数GetRequestHandler获取到处理函数10.2.3 UNIX Domain Socket封装函数含义备注serv_listen服务器调用该函数建立一个监听套接字,并返回套接字文件描述符建议将服务器监听套接字建立在/var/tmp/目录下serv_accept服务器调用该函数接受来自客户的连接请求 cli_conn客户调用该函数连接到服务器,其中name是客户的监听套接字该函数为客户建立的套接字将保存在/var/tmp/目录中,并且以-c的方式命名,其中c是用来区别不同套接字通讯用途的字母,由project参数指定。MiniGUI-Processes内部使用了 'a',所以由应用程序建立的套接字,应该使用除'a'之外的字母sock_write_t在建立并连接之后,客户和服务器之间就可以使用sock_write_t函数和sock_read_t函数进行数据交换和系统调用write类似,但可以传递进入一个超时参数,注意该参数以10ms为单位,为零时超时设置失效,且超时设置只在mginit程序中有效sock_read_t和系统调用read类似,但可以传递进入一个超时参数注意该参数以10ms为单位,为零时超时设置失效,且超时设置只在mginit程序中有效sock_writesock_write_t的宏定义，超时时间为零 sock_readsock_read_t的宏定义，超时时间为零 11 界面外观及特效11.1 窗口属性操作函数函数含义备注GetWindowElementAttr获取指定窗口的某个元素属性的属性值we_attr_id是窗口元素属性IDSetWindowElementAttr设置窗口的某个元素属性的属性值 GetWindowElementPixelEx获取窗口元素的颜色值 SetWindowElementRenderer设置当前窗口的渲染器werdr_name为所要设置的渲染器的名字,we_attrs是修改的窗口属性的结构体数组GetWindowRendererFromName通过名称获取渲染器 AddWindowElementRenderer添加渲染器到MiniGUI RemoveWindowElementRenderer从MiniGUI删除渲染器 GetDefaultWindowElementRenderer获取默认渲染器 SetDefaultWindowElementRenderer设置默认渲染器 SetWindowElementRenderer指定窗口渲染器 11.2 窗口元素属性名称配置文件中的名称代码名称说明captionWE_METRICS_CAPTION窗口标题栏大小WE_FONT_CAPTION窗口标题栏字体fgc_active_captionWE_FGC_ACTIVE_CAPTION焦点状态窗口标题栏前景色bgca_active_captionWE_BGCA_ACTIVE_CAPTION焦点状态窗口标题栏背景渐变起始色bgcb_active_captionWE_BGCB_ACTIVE_CAPTION焦点状态窗口标题栏背景渐变终止色fgc_inactive_captionWE_FGC_INACTIVE_CAPTION非焦点状态窗口标题栏前景色bgca_inactive_captionWE_BGCA_INACTIVE_CAPTION非焦点状态窗口标题栏背景色渐变起始色bgcb_inactive_captionWE_BGCB_INACTIVE_CAPTION非焦点状态窗口标题栏背景色渐变终止色menuWE_METRICS_MENU菜单项、菜单栏的高度 WE_FONT_MENU菜单字体fgc_menuWE_FGC_MENU菜单前景色bgc_menuWE_BGC_MENU菜单背景色borderWE_METRICS_WND_BORDER窗口边框宽度fgc_active_borderWE_FGC_ACTIVE_WND_BORDER焦点状态窗口边框颜色fgc_inactive_borderWE_FGC_INACTIVE_WND_BORDER非焦点状态窗口边框颜色scrollbarWE_METRICS_SCROLLBAR滚动条大小fgc_msgboxWE_FGC_MESSAGEBOX消息框前景色 WE_FONT_MESSAGEBOX消息框字体fgc_tipWE_FGC_TOOLTIP提示框前景色bgc_tipWE_BGC_TOOLTIP提示框背景色WE_FONT_TOOLTIP提示框字体fgc_windowWE_FGC_WINDOW窗口前景色bgc_windowWE_BGC_WINDOW窗口背景色fgc_3dboxWE_FGC_THREED_BODY三维立体框表面上符号的颜色,如对勾、箭头等的颜色mainc_3dboxWE_MAINC_THREED_BODY三维立体框边框及表面颜色fgc_selected_itemWE_FGC_SELECTED_ITEM选定菜单项(列表项)的前景色bgc_selected_itemWE_BGC_SELECTED_ITEM选定菜单项(列表项)的背景色bgc_selected_lostfocusWE_BGC_SELECTED_LOSTFOCUS选定菜单项(列表项)失去焦点后的背景色fgc_disabled_itemWE_FGC_DISABLED_ITEM无效菜单项(列表项)的前景色bgc_disabled_itemWE_BGC_DISABLED_ITEM无效菜单项(列表项)的背景色fgc_hilight_itemWE_FGC_HIGHLIGHT_ITEM高亮菜单项(列表项)的前景色bgc_hilight_itemWE_BGC_HIGHLIGHT_ITEM高亮菜单项(列表项)的背景色fgc_significant_itemWE_FGC_SIGNIFICANT_ITEM重要菜单项(列表项)的前景色bgc_significant_itemWE_BGC_SIGNIFICANT_ITEM重要菜单项(列表项)的背景色bgc_desktopWE_BGC_DESKTOP桌面背景色11.3 窗口皮肤属性名称配置文件中的名称代码名称说明skin_bkgndWE_LFSKIN_WND_BKGND桌面背景皮肤图片skin_captionWE_LFSKIN_CAPTION窗口标题栏皮肤图skin_caption_btnWE_LFSKIN_CAPTION_BTN窗口标题栏按钮皮肤图片skin_scrollbar_hshaftWE_LFSKIN_SCROLLBAR_HSHAFT水平滚动条滚槽皮肤图片skin_scrollbar_vshaftWE_LFSKIN_SCROLLBAR_VSHAFT垂直滚动条滚槽皮肤图片skin_scrollbar_hthumbWE_LFSKIN_SCROLLBAR_HTHUMB水平滚动条游标皮肤图片skin_scrollbar_vthumbWE_LFSKIN_SCROLLBAR_VTHUMB垂直滚动条游标皮肤图片skin_scrollbar_arrowsWE_LFSKIN_SCROLLBAR_ARROWS滚动条箭头皮肤图skin_tborderWE_LFSKIN_BORDER_TOP顶部边框皮肤图片skin_bborderWE_LFSKIN_BORDER_BOTTOM底部边框皮肤图片skin_lborderWE_LFSKIN_BORDER_LEFT左边边框皮肤图片skin_rborderWE_LFSKIN_BORDER_RIGHT右边边框皮肤图片skin_arrowsWE_LFSKIN_ARROWS箭头皮肤图片skin_arrows_shellWE_LFSKIN_ARROWS_SHELL肩头外围皮肤图片skin_pushbtnWE_LFSKIN_PUSHBUTTONPUSH 按钮皮肤图skin_radiobtnWE_LFSKIN_RADIOBUTTON单选按钮皮肤图片skin_checkbtnWE_LFSKIN_CHECKBUTTON复选按钮皮肤图片skin_treeWE_LFSKIN_TREE树控件皮肤图片skin_headerWE_LFSKIN_HEADER表头皮肤图片skin_tabWE_LFSKIN_TAB属性页皮肤图片skin_tbslider_hWE_LFSKIN_TBSLIDER_H水平滑动条皮肤图skin_tbslider_vWE_LFSKIN_TBSLIDER_V垂直滑动条皮肤图skin_trackbar_horzWE_LFSKIN_TRACKBAR_HORZ水平轨迹条皮肤图skin_trackbar_vertWE_LFSKIN_TRACKBAR_VERT垂直轨迹条皮肤图skin_progressbar_htrackWE_LFSKIN_PROGRESS_HTRACKBAR水平进度条滑轨皮肤图片skin_progressbar_vtrackWE_LFSKIN_PROGRESS_VTRACKBAR垂直进度条滑轨皮肤图片skin_progressbar_hchunkWE_LFSKIN_PROGRESS_HCHUNK水平进度条滑块皮肤图片skin_progressbar_vchunkWE_LFSKIN_PROGRESS_VCHUNK垂直进度条滑块皮肤图片11.4 渲染器结构体成员成员名称说明name渲染器名称,长度为LEN_RENDERER_NAM。宏LEN_RENDERER_NAME定义为15init渲染器初始化函数指针。用来初始化渲染器的基本信息,包括窗口元素的尺寸、字体、颜色等窗口属性信息和渲染器私有信息。deinit渲染器销毁函数指针。用来释放渲染器所占用的资源。calc_3dbox_color三维立体颜色计算函数指针，此函数根据三维立体边框和表面颜色color和计算标志flag获取一个颜色值draw_3dbox三维立体框绘制函数指针draw_radio单选框绘制函数指针draw_checkbox非选中复选框绘制函数指针draw_checkmark选中复选框绘制函数指针draw_arrow箭头绘制函数指针draw_fold打开的或者是关闭的文件夹、树控件的缩进、展开标志的绘制函数指针draw_focus_frame焦点方框绘制函数指针draw_normal_item无效状态的列表框子项的绘制函数指针draw_significant_item需重点标识的列表框子项的绘制函数指针draw_push_buttonPUSH按钮绘制函数指针draw_radio_button单选按钮绘制函数指针draw_check_button复选框按钮绘制函数指针draw_border窗口边框绘制函数指针draw_caption窗口标题栏绘制函数指针draw_caption_button窗口标题栏按钮绘制函数指针。标题栏按钮包括:最小化按钮、最大化按钮、关闭按钮draw_scrollbar滚动条绘制函数指针calc_trackbar_rect轨迹条外框绘制函数指针draw_trackbar轨迹条绘制函数指针calc_we_area窗口各元素区域计算函数指针。元素区域包括边框、标题栏、标题栏按钮、工具栏、菜单、客户区、窗口水平滚动条和垂直滚动条calc_we_metrics窗口各元素尺寸的计算函数指针。所包含的元素与calc_we_area函数所包含的元素相同hit_test获取鼠标所点击的窗口元素的函数指针on_click_hotspot当鼠标点击到热点区域时,进行相应处理的函数指针draw_custom_hotspot热点区域的绘制函数指针calc_thumb_area水平滚动条和垂直滚动条游标区域的计算函数指针disabled_text_out无效区域文字的输出函数指针draw_tab属性页控件标签的绘制函数指针draw_progress进度条绘制函数draw_header列表框或者网格控件的表头绘制函数指针on_get_rdr_attr渲染器私有信息获取函数指针on_set_rdr_attr渲染器私有信息设置函数指针erase_background窗口背景擦除绘制函数指针draw_normal_menu_item正常状态菜单项绘制函数指针draw_hilite_menu_item高亮状态菜单项绘制函数指针draw_disabled_menu_item无效状态菜单项绘制函数指针we_metrics窗口尺寸属性we_colors窗口颜色属性we_fonts窗口字体属性we_icon窗口所使用的图标句柄refcount渲染器引用计数private_info渲染器私有信息指针11.5 双缓冲区操作函数函数含义备注CreateSecondaryDC双缓冲区DC创建函数根据传入的窗口大小,创建兼容的内存DC并返回SetSecondaryDC将已经创建好的内存DC设置为目标主窗口的双缓冲区,并设置从双缓冲区的屏幕DC数据复制回调函数 GetSecondaryDC双缓冲区句柄获取函数 GetSecondaryClientDC该函数用于双缓冲窗体的客户区绘制DC，如果窗体不支持双缓冲,则直接返回一般的客户区DC,相当于调用GetClientDC ReleaseSecondaryDC该函数用于释放双缓冲DC,如果是主窗体本身的双缓冲DC,则什么也不处理;否则释该DC DeleteSecondaryDC该函数删除由CreateSecondaryDC创建的内存DC GetSecondarySubDC该函数仅针对双缓冲,在私有窗口DC基础上创建子DC使之可以作为主窗口的客户DC,或者控件的DC使用ReleaseSecondarySubDC该函数释放私有DC的子DC 在调用 SetSecondaryDC 函数时要注意以下几点如果主窗口具有WS_EX_AUTOSecondaryDC风格,则会取消该风格,并调用 DeleteSecondaryDC函数删除已有的双缓冲区,并返回HDC_SCREEN如果主窗口没有WS_EX_AUTOSecondaryDC风格,则返回原先的双缓冲区句柄。原先的双缓冲区由应用程序自行管理如果传入HDC_SCREEN,将取消窗口的双缓冲机制如果调用该函数时,传递进入的ON_UPDATE_SecondaryDC回调函数为NULL,则这时MiniGUI不会自动完成屏幕DC到屏幕的显示的绘制,用户需要使用基本的块拷贝函数完成双缓冲区到屏幕DC的复制;否则调用该回调函数由应用程序负责从双缓冲区到屏幕DC的复制,应用程序可在此时完成界面特效12 图形设备接口12.1 设备上下文句柄函数含义备注BeginPaint接收到MSG_PAINT消息时，获取句柄 EndPaint绘制结束之后，释放设备上下文句柄 GetDC获取的设备上下文是针对整个窗口的避免同时使用多个设备上下文,并避免在递归函数中调用GetSubDC获取指定DC的兼容子DC GetClientDC获取的设备上下文是针对窗口客户区 ReleaseDC释放上面三个函数获取的设备上下文 CreatePrivateDC创建私有设备环境上下文，如果主窗口的扩展风格中指定了WS_EX_USEPRIVATECDC风格,则CreateMainWindow函数会自动为该窗口的客户区建立私有设备上下文 CreatePrivateSubDC创建私有设备环境上下文的兼容子DC CreatePrivateClientDC创建客户区私有设备环境上下文，如果控件类具有CS_OWNDC属性,则所有属于该控件类的控件将自动建立私有设备上下文 GetPrivateClientDC获取私有设备环境上下文 DeletePrivateDC删除私有设备环境上下文，自动创建的，系统将在销毁窗口时自动调用 SaveDC保存设备环境上下文 RestoreDC恢复设备环境上下文 CreateCompatibleDCEx内存设备上下文的创建，在系统内存中建立一个类似显示内存的区域,然后在该区域中进行绘图操作,结束后再复制到显示内存中速度很快,减少直接操作显存造成的闪烁现象CreateCompatibleDC内存设备上下文的创建，在系统内存中建立一个类似显示内存的区域,然后在该区域中进行绘图操作,结束后再复制到显示内存中 CreateMemDC指定新建内存DC的高度、宽度、颜色深度,以及必要的RGBA组成方式 ConvertMemDC将一个任意的内存DC对象,根据给定的参考DC的象素格式进行转换 DeleteMemDC删除创建的内存设备上下文 DeleteCompatibleDC删除创建的内存设备上下文 SetMemDCAlpha设定或者取消整个内存DC对象的Alpha通道值Alpha通道值作用在DC的所有象素点上SetMemDCColorKey设定或者取消整个内存DC对象的ColorKey即透明象素值CreateMemDCFromBitmap创建一个指向设备相关位图并和指定DC兼容的内存DC CreateMemDCFromMyBitmap创建指向设备无关位图的内存DC LockDC锁定给定HDC的指定矩形区域,然后返回缓冲区头指针 UnlockDC解开已锁定的HDC InitSlaveScreen创建副屏可以根据指定的引擎和显示模式构造打开双屏并返回一个图形设备上下文句柄TerminateSlaveScreen销毁副屏hdc 参数是InitSlaveScreen函数返回的表示副屏的图形设备上下文句柄12.2 矩形/区域/剪切域操作函数含义备注SetRect对RECT对象的各个分量进行赋值 SetRectEmpty将RECT对象设置为空 IsRectEmpty判断给定RECT对象是否为空 NormalizeRect对给定矩形进行正规化处理满足(right>left并且 bottom>top)CopyRect复制矩形 EqualRect判断两个RECT对象是否相等 IntersectRect求两个RECT对象之交集不相交,返回FALSEDoesIntersect仅仅判断两个矩形是否相交 IsCovered判断对象A是否全部覆盖对象B UnionRect求两个矩形之并不相并,返回FALSEGetBoundRect求两个矩形的外包最小矩形 SubstractRect从一个矩形中减去另外一个矩形 OffsetRect对给定的RECT对象进行平移处理 InflateRect对给定的RECT对象进行膨胀处理给定膨胀值的两倍InflateRectToPt将给定的RECT对象膨胀到指定的点 PtInRect判断给定的点是否位于指定的RECT中 SetClipRgn将剪切域设为仅包含一个矩形的剪切域 ClipRgnCopy复制剪切域 ClipRgnIntersect求两个剪切域的交集 GetClipRgnBoundRect求剪切域的外包最小矩形 IsEmptyClipRgn判断剪切域是否为空 EmptyClipRgn释放剪切域中的剪切矩形,并清空剪切域 AddClipRect将一个剪切矩形追加到剪切域中 IntersectClipRect求剪切区域和给定矩形相交的剪切区域 SubtractClipRect从剪切区域中减去指定的矩形 CreateClipRgn创建一个剪切区域 DestroyClipRgn清空并且销毁一个剪切区域 ExcludeClipRect从设备上下文的当前可见区域中排除给定的矩形区域设备上下文的可见区域将缩小IncludeClipRect向当前设备上下文的可见区域中添加一个矩形区域设备上下文的可见区域将扩大ClipRectIntersect将设备上下文的可见区域设置为已有区域和给定矩形区域的交集 SelectClipRect将设备上下文的可见区域重置为一个矩形区域 SelectClipRegion将设备上下文的可见区域设置为一个指定的区域 GetBoundsRect获取当前可见区域的外包最小矩形 PtVisible判断给定的点是否可见 RectVisible判断给定的矩形是否可见 PtInRegion检查给定点是否位于给定的区域中 RectInRegion检查给定矩形是否和给定区域相交 OffsetRegionEx将剪切域处于两个矩形区域的重叠区的剪切矩形进行位移 OffsetRegion对剪切域简单的进行位移 IntersectRegion对两个给定区域进行求交运算 UnionRegion合并两个不同的区域 SubtractRegion从一个区域中减去另外一个区域 XorRegion对两个区域进行异或运算 GetRasterOperation获取当前的光栅操作 SetRasterOperation设置当前的光栅操作 12.3 像素与RGB操作函数函数含义SetPixel直接设置像素值SetPixelRGB通过RGB值设置像素值GetPixel直接获取像素值GetPixelRGB通过RGB值获取像素值RGB2PixelRGB值转换成像素值Pixel2RGB像素值转换成RGB值12.4 位图操作函数函数含义备注FillBox填充指定矩形颜色设置刷子颜色后，受当前光栅操作的影响FillCircle填充指定的圆颜色设置刷子颜色后，受当前光栅操作的影响FillEllipse填充指定的椭圆颜色设置刷子颜色后，受当前光栅操作的影响FillPolygon填充指定的多边形颜色设置刷子颜色后，受当前光栅操作的影响FloodFill指定点开始填注设置刷子颜色后，受当前光栅操作的影响FillBoxWithBitmap用设备相关位图对象填充矩形框可以用来扩大或者缩小位图FillBoxWithBitmapPart用设备相关位图对象的部分填充矩形框也可以扩大或缩小位图BitBlt用来实现两个相同或不同的设备上下文之间的显示内存复制 StretchBlt在BitBlt的基础上进行缩放操作 LoadBitmapEx将位图对象的逐个扫描行装载成设备无关的位图对象可以减少对内存资源的占用LoadBitmapFromFile从文件加载位图，设备相关 LoadBitmapFromMemory从内存加载位图，设备相关 LoadBitmapLoadBitmapFromFile函数宏定义 UnloadBitmap卸载位图 LoadMyBitmapEx将位图文件装载成设备无关的位图对象 LoadMyBitmapFromFile从文件加载位图，设备无关 LoadMyBitmapFromMemory从内存加载位图，设备无关 UnloadMyBitmap卸载位图 InitMyBitmapSL为LoadMyBitmapSL函数的装载进行初始化 LoadMyBitmapSL每加载完一行后,将调用传入该函数的用户定义回调函数cb对装载后的一条扫描线进行处理CleanupMyBitmapSLLoadMyBitmapSL加载完释放资源 PaintImageEx将指定的图形直接绘制到屏幕上，无需装载为BITMAP对象减少图片装载和绘制中内存消耗PaintImageFromFile从文件绘制 PaintImageFromMem从内存绘制 ExpandMyBitmap将设备无关位图转换为和特定设备上下文相关的位图 ScaleBitmap将源BITMAP对象进行伸缩处理 GetBitmapFromDC将指定矩形范围内的象素复制到BITMAP对象中 GetPixelInBitmap获得BITMAP对象中指定位置的象素值 SetPixelInBitmap设置BITMAP对象中指定位置的象素值 BitBlt 函数的各参数含义如下hsdc:源设备上下文sx,sy:源设备上下文中所选矩形的左上角坐标sw,sh:所选矩形的宽度和高度hddc:目标设备上下文dx,dy:目标设备上下文中目标矩形的左上角坐标dwRop:光栅操作,目前被忽略12.5 图片缩放/旋转函数函数含义StretchPaintImageFromFile从文件读入图片信息并进行缩放处理StretchPaintImageFromMem从内存中读取图片信息并进行缩放处理StretchPaintImageEx从数据源中读取图片信息并同时进行缩放处理PivotScaledBitmapFlip将位图进行垂直或水平翻转,并且可以缩放至指定宽度、高度,同时绕指定点旋转一指定的角度angle并将它画在DC的指定位置RotateBitmap可对位图进行绕中心旋转PivotBitmap可对位图进行绕指定旋转中心进行旋转RotateScaledBitmap将位图缩放至指定的宽度和高度并绕中心旋转指定的角度RotateBitmapVFlip将位图垂直翻转并绕中心旋转RotateBitmapHFlip将位图水平翻转并绕中心旋转RotateScaledBitmapVFlip将位图垂直翻转,缩放到指定的宽度和高度并绕中心旋转RotateScaledBitmapHFlip将位图水平翻转,缩放到指定的宽度和高度并绕中心旋转12.6 调色板操作函数函数含义CreatePalette创建一个新的调色板GetDefaultPalette得到默认的调色板GetPaletteEntries获取调色板的入口项SetPaletteEntries设置调色板的入口项ResizePalette重设调色板的大小GetNearestPaletteIndex得到调色板的最接近的索引值GetNearestColor得到调色板的最接近的颜色12.7 画线操作函数函数含义LineClipper直线剪切器，对给定的直线进行剪切LineGenerator直线生成器CircleGenerator圆生成器EllipseGenerator椭圆生成器CircleArcGenerator圆弧生成器PolygonIsMonotoneVertical判断给定的多边形是否是垂直单调多边形MonotoneVerticalPolygonGenerator垂直多边形生成器PolygonGenerator一般多边形生成器FloodFillGenerator填注生成器LineTo从当前画笔点画直线到给定点MoveTo将当前画笔的起始点移动到给定点Rectangle绘制矩形RoundRect绘制圆角矩形PollyLineTo利用LineTo函数画折线SplineTo利用LineTo函数画三次样条曲线Circle绘制圆Ellipse绘制椭圆CircleArc绘制圆弧InitFreeClipRectList为区域创建剪切矩形的私有堆InitClipRgn初始化区域,并指定区域使用已创建的私有堆InitCircleRegion将某个区域分别初始化为圆InitEllipseRegion将某个区域分别初始化为椭圆InitPolygonRegion将某个区域分别初始化为多边形12.8 高级二维绘图函数在配置MiniGUI时,我们可以通过--enable-adv2dapi参数来打开MiniGUI中的高级二维绘图函数接口。当MiniGUI中包含高级二维绘图函数接口时,前面提到的所有填充类函数将受到当前画刷属性的影响,这些函数包括FillBox 、FillCircle、 FillEllipse、FillPolygon、FloodFill等等,但基本的线段绘制函数却不会受画笔属性的影响,这些函数包括MoveTo /LineTo、Rectangle、PolyLineTo、SplineTo、Circle、Ellipse、CircleArc等函数。这些基本的线段绘制函数仍将以零画笔绘制函数说明GetPenType/SetPenType获取/设置画笔类型GetPenWidth/SetPenWidth获取/设置画笔宽度,以象素为单位GetPenCapStyle/SetPenCapStyle获取/设置画笔端点风格GetPenJoinStyle/SetPenJoinStyle获取/设置画笔接合风格SetPenDashes设定画笔的虚实GetBrushType/SetBrushType获取/设置画刷类型SetBrushInfo设定画刷所使用的位图或者点刻位图类型说明PT_SOLID表示实画笔PT_ON_OFF_DASH开/关虚线，虚实线段中的偶数段会被绘制,而奇数段不会被绘制PT_DOUBLE_DASH双虚线，虚实线段中的偶数段会被绘制,而奇数段会根据画刷的设置进行绘制PT_CAP_BUTT线段的端点被绘制为矩形,并且扩展到端点的坐标处PT_CAP_ROUND线段的端点被绘制为半圆形,端点是圆弧的圆心,直径是线段的宽度PT_CAP_PROJECTING线段的端点被绘制为矩形,并超出端点坐标,超出的部分为线段宽度的一半PT_JOIN_MITER相连两条线段的边被扩展为一个斜角,又称"斜接合"PT_JOIN_ROUND相连两条线段的边被扩展为圆弧,又称"圆接合"PT_JOIN_BEVEL相连两条线段的接合形成了一个斜面,又称"斜面接合"BT_SOLID实画刷。以当前的画刷颜色填充BT_TILED位图画刷。以当前设定的位图进行平铺式填充BT_STIPPLED透明点刻画刷。使用当前设定的点刻位图填充,点刻位图中被设置的位将以画刷颜色填充,而未被设置的位将不做绘制(即保留背景)BT_OPAQUE_STIPPLED不透明点刻画刷函数说明LineEx函数将按照当前的画笔属性绘制一条直线段,从(x1,y1)到(x2,y2)ArcEx函数将按照当前的画笔属性绘制一条圆弧线段,该圆弧的圆心为(x,y),所在圆或椭圆的最小外接矩形宽为width,高为 height;圆弧的起始角度为ang1,以1/64度为单位表示,ang2指的是圆弧终止角度相对起始角度的度数,以1/64度为单位表示; ang2为正,表示逆时针方向,为负表示顺时针方向。当ang2大于等于360x64时,表示要绘制的不是圆弧而是一个完整的圆弧或者椭圆FillArcEx函数将按照当前的画刷属性填充一个圆弧扇形。参数意义和ArcEx相同PolyLinEx函数按照当前的画笔属性绘制多条线段,如果有相连线段,则会根据画笔的属性进行接合处理PolyArcEx函数按照当前的画笔属性绘制多条圆弧,如果有相连圆弧,则会根据画笔的属性进行接合处理PolyFillArcEx函数填充多个圆弧13 文本的处理与显示13.1 字体的加载与创建函数含义备注LoadDevFontFromFile动态加载设备字体 DestroyDynamicDevFont卸载动态加载的设备字体 CreateBMPDevFont创建位图设备字体，不能在MiniGui.cfg中配置 AddGlyphsToBMPFont用来往已创建的位图设备字体里面增加字符 DestroyBMPFont用来销毁位图设备字体 CreateLogFont创建逻辑字体 CreateLogFontByName通过名字创建逻辑字体 CreateLogFontIndirect间接的创建逻辑字体 DestroyLogFont销毁创建的逻辑字体不能销毁被选中的逻辑字体GetLogFontInfo获取逻辑字体信息 GetSystemFont返回指定的系统逻辑字体 GetCurFont得到当前使用的字体 SelectFont给窗口设置字体 GetSystemFont函数的参数SYSLOGFONT_DEFAULT:系统默认字体,必须是单字节字符集逻辑字体,必须由 RBF 设备字体组成SYSLOGFONT_WCHAR_DEF:系统默认多字节字符集字体,通常由RBF设备字体组成,并且多字节字体的宽度是SYSLOGFONT_DEFAULT 逻辑字体的两倍SYSLOGFONT_FIXED:固定宽度的系统字体SYSLOGFONT_CAPTION:用于显示标题栏文本的逻辑字体SYSLOGFONT_MENU:用于显示菜单文本的逻辑字体SYSLOGFONT_CONTROL:用于控件的默认逻辑字体13.2 文本输出函数函数含义备注GetTextExtentPoint计算在给定的输出宽度内输出多字节文本时,可输出的最大字符个数、每个字符所在的字节位置、每个字符的输出位置,以及实际的输出高度和宽度 GetTabbedTextExtentPoint在GetTextExtentPoint函数的基础上,增加了对回车、换行和TAB键等格式化字符的处理 GetFontHeight返回逻辑字体的高度 GetMaxFontWidth返回逻辑字体的最大字符宽度 GetTextExtent计算文本的输出高度和宽度 GetTabbedTextExtent返回格式化字符串的输出高度和宽度 TextOutLen用来在给定位置输出指定长度的字符串,若长度为-1,则字符串必须是以'0' 结尾的 TabbedTextOutLen用来输出格式化字符串 TabbedTextOutEx用来输出格式化字符串,但可以指定字符串中每个TAB键的位置 GetLastTextOutPos获取最后的文本位置 TextOutTextOutLen输出全部文本 TabbedTextOutTabbedTextOutLen格式化全部文本 DrawText以不同的对齐方式在指定的矩形内部输出文本尚不支持对UTF-16编码的文本输出DrawTextEx在DrawText函数的基础上增加了对输入文本首行缩进字符数的指定 DrawTextEx2在前两者的基础上,增加了对首行能显示的字符个数的计算 GetTextCharacterExtra获取当前字符间距值 SetTextCharacterExtra设置字符间距值 GetTextAboveLineExtra获取行前间隔值 SetTextAboveLineExtra设置行前间隔值 GetTextBellowLineExtra获取行后间隔值 SetTextBellowLineExtra设置行后间隔值 13.3 输出格式标识格式标识符含义备注DT_TOP在垂直方向顶端对齐只对单行输出有效(DT_SINGLELINE)DT_VCENTER在垂直方向居中只对单行输出有效(DT_SINGLELINE)DT_BOTTOM在垂直方向底端对齐只对单行输出有效(DT_SINGLELINE)DT_LEFT水平方向左对齐 DT_CENTER水平对中 DT_RIGHT水平方向右对齐 DT_WORDBREAK当文本输出超过矩形区时按单词换行输出 DT_CHARBREAK当文本输出超过矩形区时按字符换行输出 DT_SINGLELINE单行输出无此标志时会忽略垂直方向的对齐标志DT_EXPANDTABS扩展TAB字符 DT_TABSTOP格式参数的高8位用来指定TAB键宽度 DT_NOCLIP不作输出剪切，默认将把输出剪切到指定矩形 DT_CALCRECT不作实际输出,只计算实际的输出矩形大小 13.4 字体渲染风格逻辑字体风格名称风格字符逻辑字体风格值含义weight: FONT_WEIGHT_REGULAR第一位"r"FS_WEIGHT_REGULAR不作特殊处理weight: FONT_WEIGHT_BOLD第一位"b"FS_WEIGHT_BOLD加粗显示weight: FONT_WEIGHT_LIGHT第一位"l"FS_WEIGHT_LIGHT使用背景色描绘字型的边缘,其他地方透明显示weight: FONT_WEIGHT_BOOK第一位"b"FS_WEIGHT_BOOK采用低通滤波算法处理矢量字型边缘或者放大后的字型边缘weight: FONT_WEIGHT_DEMIBOLD第一位"d"FS_WEIGHT_DEMIBOLD加粗的同时,采用低通滤波算法处理矢量字型边缘或者放大后的字型边缘weight: FONT_WEIGHT_SUBPIXEL第一位"s"FS_WEIGHT_SUBPIXEL采用sub-pixel技术渲染字型slant: FONT_SLANT_ROMAN第二位"r"FONT_SLANT_ROMAN不作特殊处理slant: FONT_SLANT_ITALIC第二位"i"FONT_SLANT_ITALIC斜体显示字型flip: FONT_OTHER_NIL第三位除H/V/T之外N/A不作任何处理flip: FONT_FLIP_HORZ第三位"H"FS_FLIP_HORZ将字型水平翻转显示flip: FONT_FLIP_VERT第三位"V"FS_FLIP_VERT将字型垂直翻转显示other: FONT_OTHER_NIL第四位除 S/N之外N/A不作任何处理other: FONT_OTHER_AUTOSCALE第四位"S"FS_OTHER_AUTOSCALE根据逻辑字体期望的大小自动放大显示设备字体字型,仅适用于点阵字体other: FONT_OTHER_TTFNOCACHE第四位"N"FS_OTHER_TTFNOCACHE在使用 TrueType字体渲染该逻辑时,关闭缓存other: FONT_OTHER_LCDPORTRAIT第四位"P"FS_OTHER_LCDPORTRAIT在使用 TrueType字体渲染该逻辑时, LCD为PORTRAIT模式underline: FONT_UNDERLINE_NONE第五位"n"FS_UNDERLINE_NONE无下划线线underline: FONT_UNDERLINE_LINE第五位"u"FS_UNDERLINE_LINE添加下划线struckout: FONT_STRUCKOUT_NONE第六位"n"FS_STRUCKOUT_NONE无删除线struckout: FONT_STRUCKOUT_LINE第六位"s"FS_STRUCKOUT_LINE添加删除线14 Mginit专用函数函数含义JoinLayer将自己添加到一个层中GetLayerInfo可以得到层的信息SetTopmostLayer将指定的层设置为最顶层DeleteLayer删除层ServerStartup创建监听套接字ServerSetTopmostLayer将把指定的层切换到最上面ServerCreateLayer将在系统中创建指定的层ServerDeleteLayer从系统中删除指定的层GetClientByPID根据客户的进程标识号返回客户标识号SetTopmostClient通过指定的客户标识号来设置顶层,它将把客户所在的层切换到最上面SetServerEventHook在mginit中设置底层事件的钩子,在钩子函数返回零给MiniGUI时,MiniGUI将继续事件的处理,并最终将事件发送到当前活动客户;反之将终止事件的处理Send2Client服务器可利用该消息将指定的消息发送到某个客户ServerGetNextZNode用于遍历所有的Z序节点ServerGetZNodeInfo用于获得某个特定Z序节点的信息ServerDoZNodeOperation用于完成切换主窗口Z序和/或设置某主窗口为当前活动窗口事件类型含义LCO_NEW_LAYER系统创建了新的层LCO_DEL_LAYER系统删除了一个层LCO_JOIN_CLIENT某个层中加入了一个客户LCO_REMOVE_CLIENT某个客户从所在的层中删除LCO_TOPMOST_CHANGED最上面的层改变了,即发生了层的切换ZNOP_ALLOCATEz-node被创建ZNOP_FREEz-node被销毁ZNOP_MOVE2TOPz-node被移为TopMost结点ZNOP_SHOWz-node已被显示ZNOP_HIDEz-node已被隐藏ZNOP_MOVEWINz-node已被移动或其大小已改变ZNOP_SETACTIVEz-node已被设置为活动态ZNOP_ENABLEWINDOWz-node被disabled或enabledZNOP_STARTDRAG开始对z-node的拖拽ZNOP_CANCELDRAG取消对z-node的拖拽ZNOP_CHANGECAPTIONz-node的名称已改变