3.11 进度条
<p>进度条由CSkinProgress类来代表,继承于CSkinView,支持CSkinView的所有属性和方法。</p>
<p>通过给进度条设置不同的图片资源,可以得到各种形态的进度条。</p>
<h2>1 属性和相关方法:</h2>
<h4>1.1设置进度条的最大进度</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Range=&quot;100&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetRange(uint64 nRange);</code></pre></li>
</ul>
<h4>1.2设置进度条的当前进度</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Pos=&quot;1&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetPos(uint64 nPos);</code></pre></li>
</ul>
<h2>请看下面的示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/3/11/1.png" alt="进度条" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml">&lt;SkinDialog DefaultWidth=&quot;800&quot; DefaultHeight=&quot;600&quot; SysButton=&quot;CLOSE&quot; Icon=&quot;128&quot; Caption=&quot;IDS_CONTROL_SHOW10&quot; Animation=&quot;SizeChange&quot;&gt;
&lt;SkinScrollBar Id=&quot;100&quot; LayoutWidth=&quot;10&quot; AlignParentRight=&quot;5&quot; AlignParentTop=&quot;50&quot; AlignParentBottom=&quot;20&quot; Layout=&quot;VScrollBar.xml&quot;/&gt;
&lt;SkinScrollBar Id=&quot;200&quot; LayoutHeight=&quot;10&quot; AlignParentBottom=&quot;5&quot; AlignParentLeft=&quot;20&quot; AlignParentRight=&quot;20&quot; Layout=&quot;HScrollBar.xml&quot;/&gt;
&lt;/SkinDialog&gt;</code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CProgressDialog : public CSkinDialog
{
public:
enum
{
IDC_PROGRESS1 = 101,
IDC_BUTTON1 = 201,
IDC_PROGRESS2 = 102,
IDC_BUTTON2 = 202,
};
public:
CProgressDialog(const tstring&amp; strXml);
public:
virtual void OnInitDialog();
protected:
void OnBtnClickedAddPosByStep4(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedAddPosByStep10(UINT uNotifyCode, int nID, CSkinView* pView);
SKINUI_DECLARE_MESSAGE_MAP()
private:
CSkinProgress* m_pProgress1;
CSkinProgress* m_pProgress2;
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;ProgressDialog.h&quot;
SKINUI_BEGIN_MESSAGE_MAP(CProgressDialog, CSkinDialog)
ON_SKINUI_COMMAND(IDC_BUTTON1, OnBtnClickedAddPosByStep4)
ON_SKINUI_COMMAND(IDC_BUTTON2, OnBtnClickedAddPosByStep10)
SKINUI_END_MESSAGE_MAP()
CProgressDialog::CProgressDialog(const tstring&amp; strXml)
: CSkinDialog(strXml)
, m_pProgress1(NULL)
, m_pProgress2(NULL)
{
}
void CProgressDialog::OnInitDialog()
{
CSkinDialog::OnInitDialog();
m_pProgress1 = static_cast&lt;CSkinProgress*&gt;(GetChildById(IDC_PROGRESS1));
m_pProgress2 = static_cast&lt;CSkinProgress*&gt;(GetChildById(IDC_PROGRESS2));
}
void CProgressDialog::OnBtnClickedAddPosByStep4(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pProgress1)
{
m_pProgress1-&gt;SetPos(min(m_pProgress1-&gt;GetPos() + 4, m_pProgress1-&gt;GetRange()));
m_pProgress1-&gt;RedrawView();
}
}
void CProgressDialog::OnBtnClickedAddPosByStep10(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pProgress2)
{
m_pProgress2-&gt;SetPos(min(m_pProgress2-&gt;GetPos() + 10, m_pProgress2-&gt;GetRange()));
m_pProgress2-&gt;RedrawView();
}
}</code></pre>