6.3 侧边栏动画
<p>类【CSlideAnimationHost】提供侧边栏动画的能力。</p>
<h2>相关方法</h2>
<p>当需要显示侧边栏时,SkinUI调用类【CSlideAnimationHost】的以下方法:</p>
<pre><code class="language-c">void Show();</code></pre>
<p>当需要隐藏侧边栏时,SkinUI调用类【CSlideAnimationHost】的以下方法:</p>
<pre><code class="language-c">void Close();</code></pre>
<h2>请看下面的示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/6/6/1.png" alt="侧边栏动画1" />
<img src="http://www.skinui.cn/doc/img/6/6/2.png" alt="侧边栏动画2" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml">&lt;SkinDialog DefaultWidth=&quot;500&quot; DefaultHeight=&quot;400&quot; SysButton=&quot;CLOSE&quot; Icon=&quot;128&quot; Caption=&quot;IDS_SLIDE_ANIMATION1&quot; Animation=&quot;SizeChange&quot;&gt;
&lt;SkinButton Id=&quot;1000&quot; LayoutWidth=&quot;125&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;IDS_CLICK_ME&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentLeft=&quot;50&quot; AlignParentVerticalCenter=&quot;0&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SlideAnimationHost Id=&quot;2000&quot; LayoutWidth=&quot;300&quot; AlignParentTop=&quot;30&quot; AlignParentBottom=&quot;0&quot; AlignParentRight=&quot;0&quot; BkgImage=&quot;SlideShadow.png&quot; Visible=&quot;false&quot;&gt;
&lt;SkinSlideLayout Id=&quot;2001&quot; LayoutWidth=&quot;FillParent&quot; LayoutHeight=&quot;FillParent&quot; Color=&quot;ID_COLOR_RED&quot;&gt;
&lt;/SkinSlideLayout&gt;
&lt;/SlideAnimationHost&gt;
&lt;/SkinDialog&gt;</code></pre>
<h4>h文件</h4>
<pre><code class="language-c">#pragma once
class CSlideAnimationDialog : public CSkinDialog
{
public:
enum
{
IDC_BUTTON_TEST = 1000,
IDC_LAYOUT_SLIDE_HOST = 2000,
IDC_LAYOUT_SLIDE = 2001,
};
public:
CSlideAnimationDialog(const tstring&amp; strXml);
public:
virtual void OnInitDialog();
virtual void HandleLButtonDown(CPoint point, BOOL&amp; bHandle);
protected:
void OnBtnClickedTest(UINT uNotifyCode, int nID, CSkinView* pView);
SKINUI_DECLARE_MESSAGE_MAP()
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-c">#include &quot;stdafx.h&quot;
#include &quot;SlideAnimationDialog.h&quot;
SKINUI_BEGIN_MESSAGE_MAP(CSlideAnimationDialog, CSkinDialog)
ON_SKINUI_COMMAND(IDC_BUTTON_TEST, OnBtnClickedTest)
SKINUI_END_MESSAGE_MAP()
CSlideAnimationDialog::CSlideAnimationDialog(const tstring&amp; strXml)
: CSkinDialog(strXml)
{
}
void CSlideAnimationDialog::OnInitDialog()
{
CSkinDialog::OnInitDialog();
}
void CSlideAnimationDialog::HandleLButtonDown(CPoint point, BOOL&amp; bHandle)
{
CSlideAnimationHost* pAnimationHost = static_cast&lt;CSlideAnimationHost*&gt;(GetChildById(IDC_LAYOUT_SLIDE_HOST));
if(pAnimationHost &amp;&amp; pAnimationHost-&gt;GetState() == VS_NORMAL)
{
pAnimationHost-&gt;Hide();
bHandle = TRUE;
}
else
{
CSkinDialog::HandleLButtonDown(point, bHandle);
}
}
void CSlideAnimationDialog::OnBtnClickedTest(UINT uNotifyCode, int nID, CSkinView* pView)
{
CSlideAnimationHost* pAnimationHost = static_cast&lt;CSlideAnimationHost*&gt;(GetChildById(IDC_LAYOUT_SLIDE_HOST));
if(pAnimationHost)
{
CSkinSlideLayout* pSlideLayout = static_cast&lt;CSkinSlideLayout*&gt;(GetChildById(IDC_LAYOUT_SLIDE));
if (pSlideLayout)
{
pAnimationHost-&gt;Show(pSlideLayout);
}
}
}</code></pre>