minigui[基础篇][14]—— 界面外观及特效

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)]

//1.从姓名得到渲染器
MG_EXPORT const WINDOW_ELEMENT_RENDERER* GUIAPI GetWindowRendererFromName (const char* name);
@name: 渲染器的名字
@return WINDOW_ELEMENT_RENDERER* 渲染器

//2.获取默认渲染器
MG_EXPORT const WINDOW_ELEMENT_RENDERER* GUIAPI GetDefaultWindowElementRenderer (void);
@WINDOW_ELEMENT_RENDERER* 渲染器
    
//3.设置默认渲染器
MG_EXPORT const char* GUIAPI SetDefaultWindowElementRenderer (const char* name);
@name:渲染器名称
    
//4.指定窗口渲染器
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);
};
    
//5.添加渲染器到 MiniGUI
MG_EXPORT BOOL GUIAPI AddWindowElementRenderer (const char* name, const WINDOW_ELEMENT_RENDERER* we_rdr);
@name:渲染器名称
@WINDOW_ELEMENT_RENDERER* :渲染器
    
//6. MiniGUI 删除渲染器
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)]

3.1渲染器基本的窗口元素属性

在配置文件中的名称代码名称说明
captionWE_METRICS_CAPTION窗口标题栏大小
WE_FONT_CAPTION窗口标题栏字体
fgc_active_captionWE_FGC_ACTIVE_CAPTION焦点状态窗口标题栏前景色
fgca_active_captionWE_FGCA_ACTIVE_CAPTION焦点状态窗口标题栏背景色渐变起始色
fgcb_active_captionWE_FGCB_ACTIVE_CAPTION焦点状态窗口标题栏背景色渐变终止色
fgc_inactive_captionWE_FGC_INACTIVE_CAPTION非焦点状态窗口标题栏前景色
fgca_inactive_captionWE_FGCA_INACTIVE_CAPTION非焦点状态窗口标题栏背景色渐变起始色
fgcb_inactive_captionWE_FGCB_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桌面背景色

3.2皮肤渲染器的特有窗口皮肤属性

在配置文件中的名称代码名称说明
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垂直进度条滑块皮肤图片

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);
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
   如果你已經使用過 SkinCaption,請先卸載以前的舊版本,遮罩舊版本的路徑。 根據你使用的版本,編譯並安裝,在 IDE 的控制項欄可以看見 VCLSKIN 包含有 TSkinData,TSkinStore和TSkinCaption 如果你現在的工程上沒有 TSkinCaption, 請在放置 TSkinData 控制項的 FORM 上放上一個 TSkinCaption, TSkinCaption 是補丁的主控制項。 當TSkinCaption 的 Active 屬性為 False 時關閉補丁,當 Active 為 True 時開啟補丁。 本補丁的作用是開啟 DEMO 版失去和未曾有過的功能。 請注意:3.93 以後的版本補丁 active 屬性缺省為開啟。 新增 SKIN 的透明屬性 SkinAlpha,本設置可以製作全透明的 Vista 介面, 包括 Menus,Dialogs,MessageBox 等等全透明。 如果你需要製作透明表單,SkinAlpha 一般情況下設置為 10,否則請關閉之( SkinAlpha := 0) 此版本可以和 TNT Unicode Controls 很好的一起工作!如果出現其他問題,先把 TNT 升升級。 如果你不能編譯通過等諸如此類的問題,請先檢查你的 IDE 或 DCC(BCC) 的系統環境設置是否正確。 如果出現 ... complied with different version 等問題,先確定你已經刪除以前的舊版本, 包括目錄,確保你現在的工程引用的目錄就是當前版本的目錄。 如何在 DLL 中應用 SKIN 的問題,請注意官方的說明。(所有 VCLSKIN 的單元作為引用使用,不能把 SkinData 放置在 DLL 工程中的 Form 上,必須加入 ShareMem 單元)。 如果你需要在運行時動態啟動 SkinData,那麼 SkinCaption 也一樣需要動態啟動。 先啟動 SkinData, 再啟動 SkinCaption,SkinCaption 不是能獨立存在的控制項,必須依賴 SkinData.      例如在你的工程中 OnFormShow 時設置 SkinData.active := true;SkinCaption.Active := True,否則本補丁可能會工作不正常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值