1.外观渲染器及窗口元素属性
1.渲染器技术的优点在于,可以通过 MiniGUI 配置文件来修改界面外观,也可以通过函数接口来控制界面外观
2.渲染器的实现: 窗口元素的属性,包括窗口元素的颜色、尺寸、字体等信息
窗口元素的渲染方法,定义如何绘制窗口元素
3.classic、flat、fashion、skin 四种渲染器 皮肤渲染器除拥有元素基本属性还拥有皮肤属性
默认的是 classic fashion 渲染器需要组件 mGPlus 的支持
2.渲染器的数据结构和函数API
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XtsWNQva-1666278095075)(C:\Users\cjy\AppData\Roaming\Typora\typora-user-images\image-20221020224249296.png)]](https://i-blog.csdnimg.cn/blog_migrate/37792d4d7e4604be0d42a1c9bbbf94b2.png)
MG_EXPORT const WINDOW_ELEMENT_RENDERER* GUIAPI GetWindowRendererFromName (const char* name);
@name: 渲染器的名字
@return WINDOW_ELEMENT_RENDERER* 渲染器
MG_EXPORT const WINDOW_ELEMENT_RENDERER* GUIAPI GetDefaultWindowElementRenderer (void);
@WINDOW_ELEMENT_RENDERER* 渲染器
MG_EXPORT const char* GUIAPI SetDefaultWindowElementRenderer (const char* name);
@name:渲染器名称
MG_EXPORT BOOL GUIAPI SetWindowElementRenderer (HWND hWnd,const char* werdr_name, const WINDOW_ELEMENT_ATTR* we_attrs);
@hwnd:窗口句柄
@werdr_name:渲染器
@we_attrs:渲染参数值
WINDOW_ELEMENT_ATTR my_we_attrs [] = {
{FGC_WINDOW, 0x00FFFFFF},
{MWM_BORDER, 2},
{SYSLOGFONT_CAPTION, (DWORD)my_caption_font},
{-1, 0}
SetWindowElementRenderer (hWnd, "flat", my_we_atts);
};
MG_EXPORT BOOL GUIAPI AddWindowElementRenderer (const char* name, const WINDOW_ELEMENT_RENDERER* we_rdr);
@name:渲染器名称
@WINDOW_ELEMENT_RENDERER* :渲染器
MG_EXPORT BOOL GUIAPI RemoveWindowElementRenderer (const char* name);
@name:渲染器名称
3.渲染器元素属性
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-liyuG3Fw-1666278095079)(C:\Users\cjy\AppData\Roaming\Typora\typora-user-images\image-20221020224555210.png)]](https://i-blog.csdnimg.cn/blog_migrate/7ec1c737035623b500c6dde72a55477c.png)
3.1渲染器基本的窗口元素属性
在配置文件中的名称 | 代码名称 | 说明 |
---|
caption | WE_METRICS_CAPTION | 窗口标题栏大小 |
| WE_FONT_CAPTION | 窗口标题栏字体 |
fgc_active_caption | WE_FGC_ACTIVE_CAPTION | 焦点状态窗口标题栏前景色 |
fgca_active_caption | WE_FGCA_ACTIVE_CAPTION | 焦点状态窗口标题栏背景色渐变起始色 |
fgcb_active_caption | WE_FGCB_ACTIVE_CAPTION | 焦点状态窗口标题栏背景色渐变终止色 |
fgc_inactive_caption | WE_FGC_INACTIVE_CAPTION | 非焦点状态窗口标题栏前景色 |
fgca_inactive_caption | WE_FGCA_INACTIVE_CAPTION | 非焦点状态窗口标题栏背景色渐变起始色 |
fgcb_inactive_caption | WE_FGCB_INACTIVE_CAPTION | 非焦点状态窗口标题栏背景色渐变终止色 |
menu | WE_METRICS_MENU | 菜单项、菜单栏的高度 |
| WE_FONT_MENU | 菜单字体 |
fgc_menu | WE_FGC_MENU | 菜单前景色 |
bgc_menu | WE_BGC_MENU | 菜单背景色 |
border | WE_METRICS_WND_BORDER | 窗口边框宽度 |
fgc_active_border | WE_FGC_ACTIVE_WND_BORDER | 焦点状态窗口边框颜色 |
fgc_inactive_border | WE_FGC_INACTIVE_WND_BORDER | 非焦点状态窗口边框颜色 |
scrollbar | WE_METRICS_SCROLLBAR | 滚动条大小 |
fgc_msgbox | WE_FGC_MESSAGEBOX | 消息框前景色 |
| WE_FONT_MESSAGEBOX | 消息框字体 |
fgc_tip | WE_FGC_TOOLTIP | 提示框前景色 |
bgc_tip | WE_BGC_TOOLTIP | 提示框背景色 |
| WE_FONT_TOOLTIP | 提示框字体 |
fgc_window | WE_FGC_WINDOW | 窗口前景色 |
bgc_window | WE_BGC_WINDOW | 窗口背景色 |
fgc_3dbox | WE_FGC_THREED_BODY | 三维立体框表面上符号的颜色,如对勾、箭头等的颜色 |
mainc_3dbox | WE_MAINC_THREED_BODY | 三维立体框边框及表面颜色 |
fgc_selected_item | WE_FGC_SELECTED_ITEM | 选定菜单项(列表项)的前景色 |
bgc_selected_item | WE_BGC_SELECTED_ITEM | 选定菜单项(列表项)的背景色 |
bgc_selected_lostfocus | WE_BGC_SELECTED_LOSTFOCUS | 选定菜单项(列表项)失去焦点后的背景色 |
fgc_disabled_item | WE_FGC_DISABLED_ITEM | 无效菜单项(列表项)的前景色 |
bgc_disabled_item | WE_BGC_DISABLED_ITEM | 无效菜单项(列表项)的背景色 |
fgc_hilight_item | WE_FGC_HIGHLIGHT_ITEM | 高亮菜单项(列表项)的前景色 |
bgc_hilight_item | WE_BGC_HIGHLIGHT_ITEM | 高亮菜单项(列表项)的背景色 |
fgc_significant_item | WE_FGC_SIGNIFICANT_ITEM | 重要菜单项(列表项)的前景色 |
bgc_significant_item | WE_BGC_SIGNIFICANT_ITEM | 重要菜单项(列表项)的背景色 |
bgc_desktop | WE_BGC_DESKTOP | 桌面背景色 |
3.2皮肤渲染器的特有窗口皮肤属性
在配置文件中的名称 | 代码名称 | 说明 |
---|
skin_bkgnd | WE_LFSKIN_WND_BKGND | 桌面背景皮肤图片 |
skin_caption | WE_LFSKIN_CAPTION | 窗口标题栏皮肤图片 |
skin_caption_btn | WE_LFSKIN_CAPTION_BTN | 窗口标题栏按钮皮肤图片 |
skin_scrollbar_hshaft | WE_LFSKIN_SCROLLBAR_HSHAFT | 水平滚动条滚槽皮肤图片 |
skin_scrollbar_vshaft | WE_LFSKIN_SCROLLBAR_VSHAFT | 垂直滚动条滚槽皮肤图片 |
skin_scrollbar_hthumb | WE_LFSKIN_SCROLLBAR_HTHUMB | 水平滚动条游标皮肤图片 |
skin_scrollbar_vthumb | WE_LFSKIN_SCROLLBAR_VTHUMB | 垂直滚动条游标皮肤图片 |
skin_scrollbar_arrows | WE_LFSKIN_SCROLLBAR_ARROWS | 滚动条箭头皮肤图片 |
skin_tborder | WE_LFSKIN_BORDER_TOP | 顶部边框皮肤图片 |
skin_bborder | WE_LFSKIN_BORDER_BOTTOM | 底部边框皮肤图片 |
skin_lborder | WE_LFSKIN_BORDER_LEFT | 左边边框皮肤图片 |
skin_rborder | WE_LFSKIN_BORDER_RIGHT | 右边边框皮肤图片 |
skin_arrows | WE_LFSKIN_ARROWS | 箭头皮肤图片 |
skin_arrows_shell | WE_LFSKIN_ARROWS_SHELL | 肩头外围皮肤图片 |
skin_pushbtn | WE_LFSKIN_PUSHBUTTON | PUSH 按钮皮肤图片 |
skin_radiobtn | WE_LFSKIN_RADIOBUTTON | 单选按钮皮肤图片 |
skin_checkbtn | WE_LFSKIN_CHECKBUTTON | 复选按钮皮肤图片 |
skin_tree | WE_LFSKIN_TREE | 树控件皮肤图片 |
skin_header | WE_LFSKIN_HEADER | 表头皮肤图片 |
skin_tab | WE_LFSKIN_TAB | 属性页皮肤图片 |
skin_tbslider_h | WE_LFSKIN_TBSLIDER_H | 水平滑动条皮肤图片 |
skin_tbslider_v | WE_LFSKIN_TBSLIDER_V | 垂直滑动条皮肤图片 |
skin_trackbar_horz | WE_LFSKIN_TRACKBAR_HORZ | 水平轨迹条皮肤图片 |
skin_trackbar_vert | WE_LFSKIN_TRACKBAR_VERT | 垂直轨迹条皮肤图片 |
skin_progressbar_htrack | WE_LFSKIN_PROGRESS_HTRACKBAR | 水平进度条滑轨皮肤图片 |
skin_progressbar_vtrack | WE_LFSKIN_PROGRESS_VTRACKBAR | 垂直进度条滑轨皮肤图片 |
skin_progressbar_hchunk | WE_LFSKIN_PROGRESS_HCHUNK | 水平进度条滑块皮肤图片 |
skin_progressbar_vchunk | WE_LFSKIN_PROGRESS_VCHUNK | 垂直进度条滑块皮肤图片 |
3.3窗口属性操作函数
MG_EXPORT DWORD GUIAPI GetWindowElementAttr (HWND hwnd, int we_attr_id);
@hwnd:窗口句柄
@we_attr_id:上表中属性ID
@return DWORD 相应属性值
MG_EXPORT DWORD GUIAPI SetWindowElementAttr (HWND hwnd, int we_attr_id,DWORD we_attr);
@hwnd:窗口句柄
@we_attr_id:上表中属性ID
@we_attr:设置的值
MG_EXPORT gal_pixel GUIAPI GetWindowElementPixelEx(HWND hWnd, HDC hdc, int we_attr_id);
@hwnd:窗口句柄
@hdc:绘图句柄
@we_attr_id:上表中属性ID
@return gal_pixel 颜色值
4.创建带有渲染器的窗口
4.1主窗口创建
MG_EXPORT HWND GUIAPI CreateMainWindowEx (PMAINWINCREATE pCreateInfo,const char* werdr_name, const WINDOW_ELEMENT_ATTR* we_attrs,const char* window_name, const char* layer_name);
@pCreateInfo:主窗口创建的结构体信息
@werdr_name:渲染器名字
@we_attrs:渲染器参数 键/值列表
@window_name:窗口姓名
@layer_name:层名称
static inline HWND GUIAPI CreateMainWindow (PMAINWINCREATE pCreateInfo)
{
return CreateMainWindowEx (pCreateInfo, NULL, NULL, NULL, NULL);
}
4.2控件的创建
MG_EXPORT HWND GUIAPI CreateWindowEx2 (const char* spClassName,const char* spCaption, DWORD dwStyle, DWORD dwExStyle,int id, int x, int y, int w, int h, HWND hParentWnd,const char* werdr_name, const WINDOW_ELEMENT_ATTR* we_attrs,DWORD dwAddData);
@spClassName:控件名
@spCaption:标题
@dwStyle:风格
@dwExStyle:扩展风格
@id:控件id
@x,y,w,h:坐标和宽高
@hParentWnd:父窗口
@werdr_name:渲染器名称
@we_attrs:渲染器参数
@dwAddData:附加数据
static inline HWND GUIAPI CreateWindowEx (const char* spClassName,const char* spCaption, DWORD dwStyle, DWORD dwExStyle,int id, int x, int y, int w, int h, HWND hParentWnd,DWORD dwAddData)
{
return CreateWindowEx2 (spClassName, spCaption, dwStyle, dwExStyle,id, x, y, w, h, hParentWnd, NULL, NULL, dwAddData);
}
#define CreateWindow(class_name, caption, style, id, x, y, w, h, parent, add_data) \
CreateWindowEx(class_name, caption, style, 0, id, x, y, w, h, parent, add_data
4.3模态对话框的创建
MG_EXPORT int GUIAPI DialogBoxIndirectParamEx (PDLGTEMPLATE pDlgTemplate,HWND hOwner, WNDPROC DlgProc, LPARAM lParam,const char* werdr_name, WINDOW_ELEMENT_ATTR*we_attrs,const char* window_name, const char* layer_name);
@pDlgTemplate:对话框模板
@hOwner:托管窗口
@DlgProc:过程处理函数
@lParam:消息参数
@werdr_name:渲染器
@we_attrs:渲染器参数
@window_name:窗口名称
@layer_name:层名称
static inline int GUIAPI DialogBoxIndirectParam (PDLGTEMPLATE pDlgTemplate,
HWND hOwner, WNDPROC DlgProc, LPARAM lParam)
{
return DialogBoxIndirectParamEx (pDlgTemplate, hOwner, DlgProc, lParam,
NULL, NULL, NULL, NULL);
}
4.4非模态对话框的创建
MG_EXPORT HWND GUIAPI CreateMainWindowIndirectParamEx (PDLGTEMPLATE pDlgTemplate,HWND hOwner, WNDPROC DlgProc, LPARAM lParam,const char* werdr_name, WINDOW_ELEMENT_ATTR* we_attrs,const char* window_name, const char* layer_name);
@pDlgTemplate:对话框模板
@hOwner:托管窗口
@DlgProc:过程处理函数
@lParam:消息参数
@werdr_name:渲染器
@we_attrs:渲染器参数
@window_name:窗口名称
@layer_name:层名称
static inline HWND GUIAPI CreateMainWindowIndirectParam (PDLGTEMPLATE pDlgTemplate,
HWND hOwner, WNDPROC DlgProc, LPARAM lParam)
{
return CreateMainWindowIndirectParamEx (pDlgTemplate, hOwner, DlgProc, lParam,
NULL, NULL, NULL, NULL);
}