12 SkinUI动画、国际化、字体大小和资源发布

12.1 窗口动画

可以给对话框布局文件的【SkinDialog】节点,加上动画属性【Animation="xxx"】。当对话框打开和关闭时,显示窗口动画。

12.1.1 SizeChange动画

SizeChange动画有一个固定点。默认情况下,固定点在窗口正中心。

固定中心点的SizeChange动画

  • 对话框打开时,中心像素点保持不动,其他像素点由中心点向四个角展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,中心像素点保持不动,其他像素点由四个角向中心点收拢,透明度由完全不透明到完全透明。
固定中心点

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="SizeChange">
</SkinDialog>

固定左上角的SizeChange动画

  • 对话框打开时,左上角像素点保持不动,其他像素点由左上角向其他角展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,左上角像素点保持不动,其他像素点由其他角向左上角收拢,透明度由完全不透明到完全透明。
固定左上角

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="SizeChange" FixedPoint="0,0">
</SkinDialog>

固定右上角的SizeChange动画

  • 对话框打开时,右上角像素点保持不动,其他像素点由右上角向其他角展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,右上角像素点保持不动,其他像素点由其他角向右上角收拢,透明度由完全不透明到完全透明。
固定右上角

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="SizeChange" FixedPoint="400,0">
</SkinDialog>

固定右下角的SizeChange动画

  • 对话框打开时,右下角像素点保持不动,其他像素点由右下角向其他角展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,右下角像素点保持不动,其他像素点由其他角向右下角收拢,透明度由完全不透明到完全透明。
固定右下角

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="SizeChange"FixedPoint="400,300">
</SkinDialog>

固定左下角的SizeChange动画

  • 对话框打开时,左下角像素点保持不动,其他像素点由左下角向其他角展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,左下角像素点保持不动,其他像素点由其他角向左下角收拢,透明度由完全不透明到完全透明。
固定左下角

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="SizeChange"FixedPoint="0,300">
</SkinDialog>

12.1.2 LeftRightExpand动画

LeftRightExpand有一条固定线。默认情况下,固定线为窗口居中垂直线。

固定线为窗口居中垂直线的LeftRightExpand动画

  • 对话框打开时,居中垂直线像素点保持不动,其他像素点由居中垂直线向左右展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,居中垂直线像素点保持不动,其他像素点由左右向居中垂直线收拢,透明度由完全不透明到完全透明。
左右展开固定中间

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="LeftRightExpand">
</SkinDialog>

固定线为左边垂直线的LeftRightExpand动画

  • 对话框打开时,左边垂直线像素点保持不动,其他像素点由左边垂直线向右展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,左边垂直线像素点保持不动,其他像素点由右向左边垂直线收拢,透明度由完全不透明到完全透明。
左右展开固定左边

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="LeftRightExpand" FixedPoint="0,0">
</SkinDialog>

固定线为右边垂直线的LeftRightExpand动画

  • 对话框打开时,左边垂直线像素点保持不动,其他像素点由左边垂直线向右展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,左边垂直线像素点保持不动,其他像素点由右向左边垂直线收拢,透明度由完全不透明到完全透明。
左右展开固定右边

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="LeftRightExpand" FixedPoint="400,300">
</SkinDialog>

12.1.3 TopBottomExpand动画

TopBottomExpand有一条固定线。默认情况下,固定线为窗口居中垂直线。

固定线为窗口居中水平线的TopBottomExpand动画

  • 对话框打开时,居中水平线像素点保持不动,其他像素点由居中水平线向上下展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,居中水平线像素点保持不动,其他像素点由上下向居中水平线收拢,透明度由完全不透明到完全透明。
上下展开固定中间

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="TopBottomExpand">
</SkinDialog>

固定线为上边水平线的TopBottomExpand动画

  • 对话框打开时,上边水平线像素点保持不动,其他像素点由上边水平线向下展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,上边水平线像素点保持不动,其他像素点由下向上边水平线收拢,透明度由完全不透明到完全透明。
上下展开固定上边

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="TopBottomExpand" FixedPoint="0,0">
</SkinDialog>

固定线为下边水平线的TopBottomExpand动画

  • 对话框打开时,下边水平线像素点保持不动,其他像素点由下边水平线向上展开,透明度由完全透明到完全不透明;
  • 对话框关闭时,下边水平线像素点保持不动,其他像素点由上向下边水平线收拢,透明度由完全不透明到完全透明。
上下展开固定下边

布局文件如下:

<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Animation="TopBottomExpand" FixedPoint="400,300">
</SkinDialog>

12.2 切换动画

可以给布局文件的【SwitchAnimationHost】节点,加上动画属性【Animation="xxx"】。
SkinUI内置以下两种切换动画:

  • LeftRightSlide动画。切换时,内容左右滑动
  • TopBottomSlide动画。切换时,内容上下滑动

当需要切换子组件时,SkinUI调用类【CSwitchAnimationHost】的以下接口:

  • C++接口
void ShowView(LONG nId);
void ShowView(CSkinView* pView);
  • 通常情况下,切换动画搭配【SkinAnimationGroup】使用,请看下面的示例:
<SkinDialog DefaultWidth="400" DefaultHeight="300" SysButton="CLOSE" Icon="128" Caption="IDS_SWITCH_ANIMATION1" Animation="SizeChange" ThemeHeight="65">
    <SkinAnimationGroup Id="100" LayoutWidth="210" LayoutHeight="30" AlignParentLeft="0" AlignParentTop="35">
        <SkinRelativeLayout LayoutWidth="FillParent" LayoutHeight="FillParent">
            <SkinRadioButton Id="101" LayoutWidth="100" LayoutHeight="FillParent" ChildText1="TabButton1" Image="TabButton.png" Layout="TabButton.xml" BindView="1100" AlignParentLeft="0" Checked="true"/>
            <SkinRadioButton Id="102" LayoutWidth="100" LayoutHeight="FillParent" ChildText1="TabButton2" Image="TabButton.png" Layout="TabButton.xml" BindView="1200" AlignParentLeft="100" Radius="5"/>
        </SkinRelativeLayout>
    </SkinAnimationGroup>
    <SwitchAnimationHost Id="1000" AlignParentLeft="15" ToBottomOf="100,5" AlignParentRight="15" AlignParentBottom="15" Animation="LeftRightSlide">
        <SkinRelativeLayout Id="1100" LayoutWidth="FillParent" LayoutHeight="FillParent">
        </SkinRelativeLayout>
        <SkinRelativeLayout Id="1200" LayoutWidth="FillParent" LayoutHeight="FillParent" Visible="false">
        </SkinRelativeLayout>
    </SwitchAnimationHost>
</SkinDialog>

以上的代码,当选中SkinRadioButton时,会以动画的方式显示属性BindView绑定的SkinRelativeLayout。

12.3 侧边栏动画

类【CSlideAnimationHost】提供侧边栏动画的能力。

侧边栏动画

当需要显示侧边栏时,SkinUI调用类【CSlideAnimationHost】的以下接口:

  • C++接口
void Show();

当需要隐藏侧边栏时,SkinUI调用类【CSlideAnimationHost】的以下接口:

  • C++接口
void Close();

12.4 部分隐藏动画

类【CHideAnimationHost】提供侧边栏动画的能力。

SkinUI内置以下两种切换动画:

  • LeftRightHide动画。隐藏时,内容左右滑动
  • TopBottomHide动画。隐藏时,内容上下滑动
部分隐藏动画 LeftRightHide
部分隐藏动画 TopBottomHide

当需要显示隐藏的部分时,调用类【CHideAnimationHost】的以下接口:

  • C++接口
void ShowView(LONG nId);
void ShowView(CSkinView* pView);

当需要隐藏需要隐藏的部分时,调用类【CHideAnimationHost】的以下接口:

  • C++接口
void HideView(LONG nId);
void HideView(CSkinView* pView);

13 国际化

SkinUI默认加载资源目录【string】下文件夹【2052】下面的字符串。

  • 获得当前字符串语言
tstring strLanguage = _T("2052");
SkinUI::GetAppConfig(APP_CONFIG_STRING_LANGUAGE, strLanguage);

在程序运行过程中,执行下面的代码,可以变更程序加载的字符串资源,重启程序后生效。

  • 设置加载资源目录【string】下文件夹【2052】下面的简体中文字符串
SkinUI::SetAppConfig(APP_CONFIG_STRING_LANGUAGE, _T("2052"));
  • 设置加载资源目录【string】下文件夹【1033】下面的英文字符串
SkinUI::SetAppConfig(APP_CONFIG_STRING_LANGUAGE, _T("1033"));
  • 设置加载资源目录【string】下文件夹【1028】下面的繁体中文字符串
SkinUI::SetAppConfig(APP_CONFIG_STRING_LANGUAGE, _T("1028"));

14 文字大小

SkinUI可以将文字整体变大或变小,默认使用正常大小的文字。

  • 获得当前文字大小变更
LONG nFontSize = 0;
SkinUI::GetAppConfig(APP_CONFIG_FONT_SIZE_CHANGE, nFontSize);

在程序运行过程中,执行下面的代码,可以将文字整体变大或变小,不需要重启程序即可生效。

  • 将字体整体变大两个字号
SkinUI::ChangeFontSize(2);
  • 将字体整体变小两个字号
SkinUI::ChangeFontSize(-2);

15 资源发布

开发者需要在【InitInstance】时设置资源发布类型。

15.1发布资源文件

直接将res目录原样放在安装包。发布时,需要再带完整的【res】目录。

调用以下方法,将资源发布类型设置为【发布资源文件】:

BOOL CApp::InitInstance(ResType& resType)
{
    resType = RT_FILE;
    return TRUE;
}
优点:
  • 更新版本时,只需更新变化的资源,不需要更新整个资源目录;
缺点:
  • 可以随意获得和修改资源文件;

15.2 发布资源文件包

将res目录下的文件夹打包成【xxx.res】文件。发布时,只需携带【xxx.res】即可,不需要再带完整的【res】目录。

调用以下方法,将资源发布类型设置为【发布资源文件包】:

BOOL CApp::InitInstance(ResType& resType)
{
    resType = RT_FILE_PACKAGE;
    return TRUE;
}
优点:
  • 资源文件加密,无法随意获得和修改资源文件;
缺点:
  • 更新版本时,需要更新整个资源目录;

15.3发布RC资源文件包

将res目录下的文件夹打包成【xxx.res】文件,然后以资源文件的方式,打包到exe文件中。发布时,资源文件已经包含在exe文件,不需要带任何资源文件。

调用以下方法,将资源发布类型设置为【发布RC资源文件包】:

BOOL CApp::InitInstance(ResType& resType)
{
    resType = RT_RC_PACKAGE;
    return TRUE;
}
优点:
  • 资源文件加密,无法随意获得和修改资源文件;
  • 只需一个exe文件即可运行,在某些情况下非常有用。
缺点:
  • 更新版本时,需要更新整个资源和exe文件;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,287评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,346评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,277评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,132评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,147评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,106评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,019评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,862评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,301评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,521评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,682评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,405评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,996评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,651评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,803评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,674评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,563评论 2 352

推荐阅读更多精彩内容