VC++对话框与控件

 

http://www.uipower.com

概述:

       本文介绍如何在程序中使用多种皮肤风格与注意事项。

 

纲要

引言

基本概念

应用案例创建

按钮的多风格设置

组合框的多风格设置

窗体的多风格设置

菜单的多风格设置

 

 

引言

Skin++ 2.0以上版本增加了在一个程序中可以同时使用多套皮肤风格的功能。在目前主流的软件中都使用了该功能,使你的软件不再千篇一律。

满足了某些控件特殊处理的需要。在本文中,我们以按钮、组合框、窗体、菜单为例进行详细说明。[回到纲要]

 

基本概念:

资源ID Resource ID):

资源ID就是Skin++ 用来识别程序中同一种类型的不同控件对象使用不同风格皮肤的一个重要的标识。

通过设置皮肤对象的Resource ID 可以为同一种类型的窗口对象指定不同的皮肤风格。

Skin++ Builder中显示如下:

例如:

一个Dialog窗体上有3个按钮,并且需要3种不同的风格。这个时候,我们可以在Builder中创建3个按钮皮肤对象:SkinButton1SkinButton2SkinButton3。在这3个皮肤对象的Resource ID中分别指定该三个按钮在程序中的资源ID(VC Resource.h中定义的控件资源ID)。这样Skin++在进行换肤的时候会首先根据自己的Resource ID值到皮肤包中去搜索相应的皮肤对象,如果找到就用该对应的皮肤进行贴图,如果没有找到就用Resource ID为空的同种类型的皮肤对象进行贴图。

Skin++中,有两种形式的Resource ID .

一种是子窗口的控件ID,在程序中可以用API函数GetDlgCtrlIDHWND hWnd)获得其ID值;

另一种是弹出窗口(非子窗口,就是窗口风格中没有WS_CHILDWINDOW)的指定ID,这个ID值是使用skinppSetWindowResID(HWND hWnd,int nResID) [Skin++2.0库提供] 指定的整形值。

目前使用子窗口控件ID的皮肤对象有:SkinButtonToolBarStatusBarProgressBarScrollBarHeaderComboBoxIPAddressHotKeyCheckBoxRadioBoxTrackBarSpinTabCtrlClientControlBarReBarGroupBoxStaticDatetime

目前使用指定ID的皮肤对象有:SkinFrame ToolWindowDialogPopup Menu

目前不使用Resource ID的皮肤对象有:Application,其设置值在整个皮肤配置中只存在一份。[回到纲要]

应用案例创建

在这里,我们创建单文档工程:MultiStyleDemo

点击完成,我们成功创建了案例工程。[回到纲要]

按钮的多风格设置

按钮部分可以设置五个状态(正常、按下、禁用、热点、默认)的背景图片、字体、颜色、光标、提示等。

案例中按钮IDC_BTN_STYLE2的文本是“按钮风格2(自定义风格1)”,

Resource.h中的定义是 :#define IDC_BTN_STYLE2   1001,这个按钮的ResourceID1001.

我们在Skin++ Builder中创建一个SkinButton,在ResourceID属性中,填上1001。这样,皮肤和程序中的资源ID就关联上了。

以后Skin++就用这个按钮配置对IDC_BTN_STYLE2按钮进行贴图和光标、提示等调用。

按钮IDC_BTN_STYLE2Skin++ Builder中的设置如下图所示:

按钮IDC_BTN_STYLE3Skin++ Builder中的设置如下图所示:

运行效果图如下:

按钮的多风格设置,全部在SkinBuilder中设置,不需要添加程序代码。[回到纲要]

组合框的多风格设置

案例中通用的ComboBox如下图所示:

案例中第一个自定义ComboBoxIDIDC_COMBO_STYLE1

Resource.h中的定义是 :#define IDC_COMBO_STYLE1   1004,这个ComboBoxResourceID1004

我们在SkinBuilder中创建一个SkinComboBox,在ResourceID属性中,填上1004。这样,皮肤和程序中的资源ID就关联上了。以后Skin++就用这个配置对IDC_COMBO_STYLE1按钮进行贴图。

IDC_COMBO_STYLE1SkinBuilder中的设置如下图所示:

SkinBuilder中再创建一个SkinScrollbar对象,在ResourceID属性中,填上1004。这样ComboBox的下拉列表框部分的滚动条就和这个对象设置相关联了。在SkinBuilder中设置如下图:

运行效果如图:

IDC_COMBO_STYLE2SkinBuilder中的设置同IDC_COMBO_STYLE1

具体设置如下图所示:

 

 IDC_COMBO_STYLE2 的显示效果如下图:

 [回到纲要]

窗体的多风格设置

SkinBuilder中创建一个SkinFrame对象,设置其ResourceID2008,这个数字你可以自己确定,但必须和该窗体的在程序中设置的ID保持一致。由于弹出类型的窗体在运行过程无法获得ResourceID,所以我们需要使用Skin++提供的接口进行设置,该接口是skinppSetWindowResID(HWND hWnd,int nResID),第一个参数是窗口的句柄,第二个参数是我们自己确定的一个ID值,该值用来关联窗体和皮肤对象。注意,我们在该窗口的WM_NCCREATE消息响应处进行设置,具体写法如下:

BOOL CMultiStyleFrame::OnNcCreate(LPCREATESTRUCT lpCreateStruct)

{

if (!CDialog::OnNcCreate(lpCreateStruct))

               return FALSE;

       sppSetWindowResID(m_hWnd,2008);

        return TRUE;

}

SkinBuilder中的设置如下图:

[回到纲要]

菜单的多风格设置

SkinBuilder中设置上面SkinFrame对象的菜单部分,如下图所示:

运行效果图如下:

      

       [回到纲要]

 

其他:

 Skin++ 高级应用首页  sppSetWindowResID

 

Copyright@2004-2007 上海勇进软件有限公司,保留所有权利。
如果您对帮助系统有任何建议,可以直接发邮件到support@uipower.com
Visual Studio,
Visual Studio logo 是微软公司在美国或在其他国家的注册商标。