SkinUI入门教程

SkinUI入门教程


3.6 复选框

<p>复选框由CSkinCheckBox类来代表,继承于CSkinButton,支持CSkinButton的所有属性和方法。</p> <p>通过给复选框设置不同的布局文件,可以得到各种形态的复选框。</p> <h2>1 属性和相关方法</h2> <h4>1.1 设置复选框是否选中</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">Checked=&amp;quot;true&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">virtual void SetChecked(BOOL bChecked);</code></pre></li> </ul> <h4>1.2 设置复选框的选中状态</h4> <p>复选框的选中状态有:完全选中状态、部分选中状态和未选中状态。</p> <ul> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">virtual void SetCheckedState(CheckState state);</code></pre></li> </ul> <h2>2 消息处理</h2> <h4>2.1 WM_COMMAND消息</h4> <p>单击鼠标左键抬起时,如果复选框Id不为0,会给所在的窗口发送WM_COMMAND消息。</p> <p>参考下面的示例代码:</p> <pre><code class="language-cpp">void CSkinCheckBox::HandleLButtonUp(CPoint point) { if(GetState() == VS_PRESS_DOWN) { SetChecked(!IsChecked()); if(GetId() != 0) { GetOwner()-&amp;gt;PostMessage(WM_COMMAND, GetId(), reinterpret_cast&amp;lt;LPARAM&amp;gt;(this)); } } SetState(VS_MOUSE_OVER); RedrawView(); }</code></pre> <h4>2.1 WM_CHECKBOX_STATE_CHANGE消息</h4> <p>复选框选中状态发生变化时,会给所在窗口发送自定义消息WM_CHECKBOX_STATE_CHANGE。</p> <p>参考下面的示例代码:</p> <pre><code class="language-cpp">void CSkinCheckBox::SetCheckedState(CheckedState state) { if(m_eCheckedState != state) { m_eCheckedState = state; GetOwner()-&amp;gt;PostMessage(WM_CHECKBOX_STATE_CHANGE, state, reinterpret_cast&amp;lt;LPARAM&amp;gt;(this)); } }</code></pre> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/3/6/1.png" alt="复选框" /></p> <h4>布局文件</h4> <pre><code class="language-xml">&amp;lt;SkinDialog DefaultWidth=&amp;quot;400&amp;quot; DefaultHeight=&amp;quot;300&amp;quot; SysButton=&amp;quot;CLOSE&amp;quot; Icon=&amp;quot;128&amp;quot; Caption=&amp;quot;IDS_CONTROL_SHOW6&amp;quot; Animation=&amp;quot;SizeChange&amp;quot;&amp;gt; &amp;lt;SkinCheckBox Id=&amp;quot;101&amp;quot; LayoutWidth=&amp;quot;200&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; ChildText1=&amp;quot;IDS_CONTROL_SHOW_TEXT8&amp;quot; Layout=&amp;quot;CheckBox.xml&amp;quot; AlignParentLeft=&amp;quot;50&amp;quot; AlignParentTop=&amp;quot;75&amp;quot;/&amp;gt; &amp;lt;SkinCheckBox Id=&amp;quot;102&amp;quot; LayoutWidth=&amp;quot;200&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; ChildText2=&amp;quot;IDS_CONTROL_SHOW_TEXT9&amp;quot; ChildImage1=&amp;quot;Icon.png&amp;quot; Layout=&amp;quot;CheckBoxWidthIcon.xml&amp;quot; AlignParentLeft=&amp;quot;50&amp;quot; AlignParentTop=&amp;quot;175&amp;quot;/&amp;gt; &amp;lt;/SkinDialog&amp;gt;</code></pre> <h4>h文件</h4> <pre><code class="language-cpp">#pragma once class CCheckBoxDialog : public CSkinDialog { public: enum { IDC_CHECKBOX1 = 101, IDC_CHECKBOX2 = 102, }; public: CCheckBoxDialog(const tstring&amp;amp; strXml); public: virtual void OnInitDialog(); protected: void OnCheckBoxClicked(UINT uNotifyCode, int nID, CSkinView* pView); LRESULT OnCheckBoxStateChange(WPARAM wParam, LPARAM lParam); SKINUI_DECLARE_MESSAGE_MAP() };</code></pre> <h4>cpp文件</h4> <pre><code class="language-cpp">#include &amp;quot;stdafx.h&amp;quot; #include &amp;quot;CheckBoxDialog.h&amp;quot; SKINUI_BEGIN_MESSAGE_MAP(CCheckBoxDialog, CSkinDialog) ON_SKINUI_COMMAND(IDC_CHECKBOX1, OnCheckBoxClicked) ON_SKINUI_COMMAND(IDC_CHECKBOX2, OnCheckBoxClicked) ON_SKINUI_MESSAGE(WM_CHECKBOX_STATE_CHANGE, OnCheckBoxStateChange) SKINUI_END_MESSAGE_MAP() CCheckBoxDialog::CCheckBoxDialog(const tstring&amp;amp; strXml) : CSkinDialog(strXml) { } void CCheckBoxDialog::OnInitDialog() { CSkinDialog::OnInitDialog(); } void CCheckBoxDialog::OnCheckBoxClicked(UINT uNotifyCode, int nID, CSkinView* pView) { CSkinCheckBox* pCheckBox = static_cast&amp;lt;CSkinCheckBox*&amp;gt;(pView); if(pCheckBox) { MsgBox(SkinUI::StringFormat(_T(&amp;quot;OnCheckBoxClicked,Id=%d, IsChecked()=%s!&amp;quot;), nID, pCheckBox-&amp;gt;IsChecked() ? _T(&amp;quot;true&amp;quot;) : _T(&amp;quot;false&amp;quot;))); } } LRESULT CCheckBoxDialog::OnCheckBoxStateChange(WPARAM wParam, LPARAM lParam) { CSkinCheckBox* pCheckBox = reinterpret_cast&amp;lt;CSkinCheckBox*&amp;gt;(lParam); if(pCheckBox) { MsgBox(SkinUI::StringFormat(_T(&amp;quot;OnCheckBoxStateChange,Id=%d,State=%d, IsChecked()=%s!&amp;quot;), pCheckBox-&amp;gt;GetId(), wParam, pCheckBox-&amp;gt;IsChecked() ? _T(&amp;quot;true&amp;quot;) : _T(&amp;quot;false&amp;quot;))); } return 1L; }</code></pre>

页面列表

ITEM_HTML