SkinUI5.0官方文档

SkinUI5.0官方文档


滑动条

<p>滑块由CSlider类来代表,继承于CProgress,支持CProgress的所有属性和方法。通过给滑块设置不同的背景图片资源,可以得到各种形态的进度条。</p> <h2>属性和相关方法</h2> <h4>设置滑块的图像</h4> <ul> <li>通过XML属性控制如下:</li> </ul> <pre><code class="language-xml">Thumb="SliderThumb.png"</code></pre> <ul> <li>通过C++程序代码调用方法控制如下:</li> </ul> <pre><code class="language-c">void SetThumb(const String&amp; strThumb);</code></pre> <h2>消息处理</h2> <h4>WM_SLIDER_POS_CHANGE</h4> <p>滑块位置发生变化时,会给所在窗口发送自定义消息WM_SLIDER_POS_CHANGE。</p> <p>参考下面的示例代码:</p> <pre><code class="language-cpp">void CSliderThumb::HandleMouseMove(CPoint point, UINT nFlags) { if(GetState() == PRESSED) { CSlider* pScrollSlider = dynamic_cast&lt;CSlider*&gt;(GetParent()); if(pScrollSlider) { CRect rcRange = pScrollSlider-&gt;GetRect(); LONG nWidth = GetRect().Width(); LONG nLeft = point.x - m_nLeftOffset; LONG nRight = nLeft + nWidth; if(nLeft &lt; rcRange.left) { nLeft = rcRange.left; } else if(nRight &gt; rcRange.right) { nLeft = rcRange.right - nWidth; } CSize szThumb = SkinUI::GetImageSize(GetBackgroundImage()); int64 nRange = pScrollSlider-&gt;GetRange(); int64 nPos = (nLeft - rcRange.left) * nRange / (rcRange.Width() - szThumb.cx); if(nPos != pScrollSlider-&gt;GetPos()) { pScrollSlider-&gt;SetPos(nPos); pScrollSlider-&gt;SetRect(rcRange); pScrollSlider-&gt;Redraw(); CSlider* pSlider = dynamic_cast&lt;CSlider*&gt;(GetParent()); if(pSlider) { GetOwner()-&gt;PostMessage(WM_SLIDER_POS_CHANGE, pScrollSlider-&gt;GetId(), reinterpret_cast&lt;LPARAM&gt;(pSlider)); } } } } }</code></pre> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/5.0/3/Slider.png" alt="滑块" /></p> <h4>布局文件</h4> <pre><code class="language-xml">&lt;FlexLayout&gt; &lt;TextView Width="MatchParent" Height="60" HorzAlign="Center" Text="IDS_CONTROL13_2" Font="ID_FONT_H4"/&gt; &lt;Line Width="MatchParent" Height="1" Margin="0,0,0,20"/&gt; &lt;RelativeLayout Width="MatchParent" Height="160"&gt; &lt;Slider Id="101" Height="21" AlignParentLeft="40" AlignParentRight="40" AlignParentTop="20" Range="100" Pos="0"/&gt; &lt;Button Id="201" Width="WrapContent" Height="30" ChildText11="增加进度, Step=4" Background="Button.png" Layout="Button.xml" AlignParentHorzCenter="0" ToBottomOf="101,10"/&gt; &lt;Slider Id="102" Height="21" AlignParentLeft="40" AlignParentRight="40" ToBottomOf="201,30" Range="100" Pos="0"/&gt; &lt;Button Id="202" Width="WrapContent" Height="30" ChildText11="增加进度, Step=10" Background="Button.png" Layout="Button.xml" AlignParentHorzCenter="0" ToBottomOf="102,10"/&gt; &lt;/RelativeLayout&gt; &lt;/FlexLayout&gt;</code></pre> <h4>h文件</h4> <pre><code class="language-cpp">#pragma once class CDemoSliderLayout : public CScrollLayout { public: enum { IDC_SLIDER1 = 101, IDC_BUTTON1 = 201, IDC_SLIDER2 = 102, IDC_BUTTON2 = 202, }; public: CDemoSliderLayout(CView* pParent); public: virtual void OnBuildFinish(); protected: void OnBtnClickedAddPosByStep4(UINT uNotifyCode, int nID, CView* pView); void OnBtnClickedAddPosByStep10(UINT uNotifyCode, int nID, CView* pView); SKINUI_DECLARE_MESSAGE_MAP() private: CSlider* m_pSlider1; CSlider* m_pSlider2; SKINUI_DECLARE_DYNCREATE(CDemoSliderLayout, CScrollLayout) };</code></pre> <h4>cpp文件</h4> <pre><code class="language-cpp">#include &lt;stdafx.h&gt; #include "DemoSliderLayout.h" SKINUI_BEGIN_MESSAGE_MAP(CDemoSliderLayout, CScrollLayout) ON_SKINUI_COMMAND(IDC_BUTTON1, OnBtnClickedAddPosByStep4) ON_SKINUI_COMMAND(IDC_BUTTON2, OnBtnClickedAddPosByStep10) SKINUI_END_MESSAGE_MAP() CDemoSliderLayout::CDemoSliderLayout(CView* pParent) : CScrollLayout(pParent) , m_pSlider1(NULL) , m_pSlider2(NULL) { } void CDemoSliderLayout::OnBuildFinish() { CScrollLayout::OnBuildFinish(); m_pSlider1 = dynamic_cast&lt;CSlider*&gt;(GetChildById(IDC_SLIDER1)); m_pSlider2 = dynamic_cast&lt;CSlider*&gt;(GetChildById(IDC_SLIDER2)); } void CDemoSliderLayout::OnBtnClickedAddPosByStep4(UINT uNotifyCode, int nID, CView* pView) { if(m_pSlider1) { m_pSlider1-&gt;SetPos(min(m_pSlider1-&gt;GetPos() + 4, m_pSlider1-&gt;GetRange())); m_pSlider1-&gt;Redraw(); } } void CDemoSliderLayout::OnBtnClickedAddPosByStep10(UINT uNotifyCode, int nID, CView* pView) { if(m_pSlider2) { m_pSlider2-&gt;SetPos(min(m_pSlider2-&gt;GetPos() + 10, m_pSlider2-&gt;GetRange())); m_pSlider2-&gt;Redraw(); } }</code></pre>

页面列表

ITEM_HTML