MyGui笔记(2)控件类型和皮肤

前篇:《MyGui笔记(1)建立第一个工程
本篇:创建控件的方法要传入控件类型和控件皮肤,这里简单记录下所有控件的类型和皮肤。
环境:MyGui3.2.0(OpenGL平台)

控件类型

        从WidgetManager::initialise()可以看到所有的控件类型为下:

控件类型 控件说明 控件备注
Button 按钮  
Canvas 画布 显示纹理
ComboBox 下拉框 派生自EditBox,可设置是否可编辑
DDContainer 拖曳容器  
EditBox 编辑框  
ItemBox 项框 派生自DDContainer,支持拖曳
ListBox 列表框  
MenuBar 菜单栏  
MenuControl 菜单控件  
MenuItem 菜单项  
MultiListBox 多行列表框  
MultiListItem 多行列表项  
PopupMenu 弹出菜单  
ProgressBar 进度条  
ScrollBar 滚动条  
ScrollView 滚动视图  
ImageBox 图像框  
TextBox 文本框  
TabControl 标签控件  
TabItem 标签项  
Widget 控件  
Window 窗口  

        这些控件的关系图如下:
第一张:

第二张:

第三张: 

 控件皮肤

        再来看Widget::_initialise(WidgetStyle _style, const IntCoord& _coord, const std::string& _skinName, Widget* _parent, ICroppedRectangle* _croppedParent, const std::string& _name)如何加载皮肤,代码如下:

1
2
3
4
5
6
7
ResourceSkin* skinInfo = nullptr;
ResourceLayout* templateInfo = nullptr;

if  (LayoutManager::getInstance().isExist(_skinName))
    templateInfo = LayoutManager::getInstance().getByName(_skinName);
else
    skinInfo = SkinManager::getInstance().getByName(_skinName);

可以看到先判断皮肤是否来自布局管理器,否则的话再从皮肤管理器进行获取,亦即先从MyGUI_BlueWhiteTemplates.xml获取,再从MyGUI_BlueWhiteSkins.xml获取。MyGUI_BlueWhiteTemplates.xml内容部分为下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
     <Resource type = "ResourceLayout"  name = "Window"  version = "3.2.0" >
        
<Widget type = "Widget"  skin = "PanelEmpty"  position = "15 10 68 49"  name = "Root" >
            
<Property key = "Snap"  value = "true" />
            
<Property key = "Movable"  value = "false" />
            
<UserString key = "LE_TargetWidgetType"  value = "Window" />
            
<Widget type = "Widget"  skin = "CaptionEmptySkin"  position = "0 0 68 28"  align = "HStretch Top" >
                
<Widget type = "TextBox"  skin = "TextBox"  position = "2 3 62 24"  align = "HStretch Top"  name = "Caption" >
                    
<Property key = "TextColour"  value = "0 0 0" />
                    
<Property key = "TextAlign"  value = "Center" />
                    
<Property key = "FontName"  value = "Default" />
                
</Widget>
            
</Widget>
            
<Widget type = "Widget"  skin = "WindowFrameSkin"  position = "0 28 68 20"  align = "Stretch" >
                
<Widget type = "Widget"  skin = "ClientTileSkin"  position = "4 2 58 12"  align = "Stretch"  name = "Client" />
            
</Widget>
        
</Widget>
    
</Resource>
    
<Resource type = "ResourceLayout"  name = "Button"  version = "3.2.0" >
        
<Widget type = "Widget"  skin = "ButtonSkin"  position = "20 25 29 26"  name = "Root" >
            
<Property key = "FontName"  value = "Default" />
            
<Property key = "TextAlign"  value = "Center" />
            
<UserString key = "LE_TargetWidgetType"  value = "Button" />
        
</Widget>
    
</Resource>

每个可视控件都有一个Resource type="ResourceLayout"的节点来描述该控件的布局,由上内容也可以看出某些控件是其他基本控件进行组合而成的。做为根子控件带有属性name="Root",其子节点包含属性描述、子控件描述等等。注意一点<UserString key="LE_TargetWidgetType" value="Button"/>
表明这个控件所使用的控件类型为Button。所有的布局控件为下:

布局名称说明控件类型
CheckBox勾选框Button
RadioButton单选按钮Button
ScrollBarH水平滚动条ScrollBar
ScrollBarV垂直滚动条ScrollBar
SliderH水平滑块ScrollBar
SliderV垂直滑块ScrollBar
SliderHEmpty空白水平滑块ScrollBar
SliderVEmpty空白垂直滑块ScrollBar
Button按钮Button
ButtonImage图像按钮Button
TextBox文本框TextBox
EditBox编辑框EditBox
EditBoxStretch可伸缩编辑框EditBox
EditBoxEmpty空白编辑框EditBox
WordWrapEmpty空白换行EditBox
ComboBox下拉框ComboBox
Window窗口Window
WindowC带标题的窗口Window
WindowCS带标题可调整大小的窗口Window
WindowCX带标题带关闭按钮的窗口Window
WindowCSX带标题可调整大小带关闭按钮的窗口Window
MenuBar菜单栏MenuBar
MenuBarButton菜单栏按钮Button
MenuBarSeparator菜单栏分割线Widget
PopupMenu弹出菜单PopupMenu
PopupMenuSeparator弹出菜单分割线Widget
PopupMenuNormal弹出菜单打钩按钮Button
PopupMenuPopup弹出菜单右侧展开按钮Button
ProgressBar进度条ProgressBar
ProgressBarFill填充式进度条ProgressBar
ListBoxItem列表框项Button
ListBox列表框ListBox
ItemBox项框ItemBox
ItemBoxEmpty空白项框ItemBox
ScrollView滚动视图ScrollView
ScrollViewEmpty空白滚动视图ScrollView
TabHeaderButton标签头按钮Button
TabControl标签控件TabControl
MultiListBox多行列表框MultiListBox
MultiListButton多行列表按钮Button
MultiSubListBox多行子列表框ListBox

MyGUI_BlueWhiteSkins.xml内容部分为下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
     <Resource type = "ResourceSkin"  name = "ButtonSkin"  size = "29 26"  texture = "MyGUI_BlueWhiteSkins.png" >
        
<BasisSkin type = "SubSkin"  offset = "0 0 7 7"  align = "Left Top" >
            
<State name = "disabled"  offset = "136 2 7 7" />
            
<State name = "normal"  offset = "136 29 7 7" />
            
<State name = "highlighted"  offset = "136 56 7 7" />
            
<State name = "pushed"  offset = "136 83 7 7" />
            
<State name = "disabled_checked"  offset = "136 110 7 7" />
            
<State name = "normal_checked"  offset = "136 137 7 7" />
            
<State name = "highlighted_checked"  offset = "136 164 7 7" />
            
<State name = "pushed_checked"  offset = "136 191 7 7" />
        
</BasisSkin>
        
<BasisSkin type = "SubSkin"  offset = "7 0 14 7"  align = "HStretch Top" >
            
<State name = "disabled"  offset = "143 2 14 7" />
            
<State name = "normal"  offset = "143 29 14 7" />
            
<State name = "highlighted"  offset = "143 56 14 7" />
            
<State name = "pushed"  offset = "143 83 14 7" />
            
<State name = "disabled_checked"  offset = "143 110 14 7" />
            
<State name = "normal_checked"  offset = "143 137 14 7" />
            
<State name = "highlighted_checked"  offset = "143 164 14 7" />
            
<State name = "pushed_checked"  offset = "143 191 14 7" />
        
</BasisSkin>
        ……
    
</Resource>

可以看出记录的是控件皮肤的构成,size属性指定控件的大小,texture指定控件所在的纹理图。含有多个SubSkin子节点,代表此皮肤的构成,比如这里的ButtonSkin皮肤是由九宫格拼接的,则有9个SubSkin子节点,另外还有个SimpleText来指定按钮上的文本位置。用SkinEditor.exe打开纹理文件MyGUI_BlueWhiteSkins.png,在Skins标签里选择ButtonSkin,切换到Regions标签,可看到具体的子皮肤构成,如下图所示:

关于MyGUI_BlueWhiteImages.xml文件的作用,这个文件全部内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?xml version = "1.0"  encoding = "UTF-8" ?>
<MyGUI type = "Resource"  version = "1.1" >
    
<Resource type = "ResourceImageSet"  name = "MultiListButtonImage" >
        
<Group name = "Icons"  texture = "MyGUI_BlueWhiteSkins.png"  size = "12 10" >
            
<Index name = "None" >
                
<Frame point = "74 185" />
            
</Index>
            
<Index name = "Up" >
                
<Frame point = "74 198" />
            
</Index>
            
<Index name = "Down" >
                
<Frame point = "74 211" />
            
</Index>
        
</Group>
    
</Resource>
</MyGUI>

只定义了一个ResourceImageSet资源图像集,名称为MultiListButtonImage,这个名称被MyGUI_BlueWhiteTemplates.xml里面的内容进行引用,内容如下: 

1
2
3
4
5
6
7
8
9
10
11
12
13
     <Resource type = "ResourceLayout"  name = "MultiListButton"  version = "3.2.0" >
        
<Widget type = "Widget"  skin = "MultiListButtonSkin"  position = "20 25 45 21"  name = "Root" >
            
<Property key = "FontName"  value = "Default" />
            
<Property key = "TextAlign"  value = "Center" />
            
<UserString key = "LE_TargetWidgetType"  value = "Button" />
            
<Widget type = "ImageBox"  skin = "ImageBox"  position = "29 4 12 10"  align = "Right VCenter"  name = "Image" >
                
<Property key = "ImageResource"  value = "MultiListButtonImage" />
                
<Property key = "ImageGroup"  value = "Icons" />
                
<Property key = "ImageName"  value = "Down" />
                
<Property key = "NeedMouse"  value = "false" />
            
</Widget>
        
</Widget>
    
</Resource>

MultiListButton多行列表按钮采用了这个图像集,用ImageEditor.exe打开MyGUI_BlueWhiteImages.xml文件,在Images标签选择MultiListButtonImage,切换到Indexes标签,可看到索引到的是空白图像、上箭头图像、下箭头图像,如下图所示:

另外,MyGUI_BlueWhiteTheme.xml文件,内容如下:

1
2
3
4
5
6
<?xml version = "1.0"  encoding = "UTF-8" ?>
<MyGUI type = "List" >
    
<List file = "MyGUI_BlueWhiteImages.xml" />
    
<List file = "MyGUI_BlueWhiteSkins.xml" />
    
<List file = "MyGUI_BlueWhiteTemplates.xml" />
</MyGUI>

这个主题文件列出了该主题所需要使用到的另外文件,分别是MyGUI_BlueWhiteImages.xmlMyGUI_BlueWhiteSkins.xmlMyGUI_BlueWhiteTemplates.xml,这些都已在上面进行大概介绍过了。
下一篇继续……​

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值