前言
自己学习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_SCROLLBAR |
#3 风格
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_TIP
3.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和100 |
CBS_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_DESKTOP |
GetMainWindowHandle |
返回包含某个窗口的主窗口句柄 |
|
GetNextChild |
获取下一个子窗口 |
用于遍历某个窗口的所有子窗口 |
GetNextMainWindow |
获取下一个主窗口句柄 |
用于遍历所有主窗口 |
GetHosting |
获取某个主窗口的托管窗口 |
|
GetFirstHosted |
获取某个主窗口的第一个被托管窗口 |
用于遍历某个主窗口的所有被托管窗口 |
GetNextHosted |
获取下一个被托管窗口 |
|
GetActiveWindow |
获取当前活动主窗口 |
|
SetActiveWindow |
设置当前活动主窗口 |
|
GetCapture |
获取当前捕获鼠标的窗口 |
|
SetCapture |
捕获鼠标 |