SkinUI入门教程

SkinUI入门教程


3.9 下拉列表框

<p>下拉列表框由CSkinComboBox类来代表,继承于CSkinRelativeLayout,支持CSkinRelativeLayout的所有属性和方法。</p> <p>CSkinComboBox通常由编辑框和按钮组合而成,并支持CSkinEditView的所有属性。</p> <h2>1 属性和相关方法</h2> <h4>1.1 设置可选项</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">OptionText=&amp;quot;男,女&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">LONG AddString(const tstring&amp;amp; str);</code></pre></li> </ul> <h4>1.2 设置当前选中</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">CurSel=&amp;quot;1&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetCurSel(LONG nCurSel);</code></pre></li> </ul> <h4>1.3 设置列表最大高度</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">ListMaxHeight=&amp;quot;100&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetListMaxHeight(LONG nMaxHeight);</code></pre></li> </ul> <h2>2 消息处理</h2> <h4>2.1 WM_COMBOBOX_SEL_CHANGE消息</h4> <p>下拉列表框选中项发生变化时,会给所在窗口发送自定义消息WM_COMBOBOX_SEL_CHANGE。</p> <p>参考下面的示例代码:</p> <pre><code class="language-cpp">void CSkinComboBar::Notify(CSkinView* pView) { if(pView &amp;amp;&amp;amp; m_pComboBox) { UINT nOldSel = m_pComboBox-&amp;gt;GetCurSel(); UINT nNewSel = pView-&amp;gt;GetId(); if(nOldSel != nNewSel) { m_pComboBox-&amp;gt;SetCurSel(nNewSel); m_pComboBox-&amp;gt;GetOwner()-&amp;gt;PostMessage(WM_COMBOBOX_SEL_CHANGE, m_pComboBox-&amp;gt;GetId(), reinterpret_cast&amp;lt;LPARAM&amp;gt;(m_pComboBox)); } } PostMessage(WM_CLOSE); }</code></pre> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/3/9/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_SHOW9&amp;quot; Animation=&amp;quot;SizeChange&amp;quot;&amp;gt; &amp;lt;SkinComboBox LayoutHeight=&amp;quot;30&amp;quot; Layout=&amp;quot;ComboBox.xml&amp;quot; Image=&amp;quot;Edit.png&amp;quot; ReadOnly=&amp;quot;true&amp;quot; Tips=&amp;quot;请选择&amp;quot; OptionText=&amp;quot;男,女&amp;quot; AlignParentLeft=&amp;quot;50&amp;quot; AlignParentRight=&amp;quot;50&amp;quot; AlignParentVerticalCenter=&amp;quot;0&amp;quot;/&amp;gt; &amp;lt;/SkinDialog&amp;gt;</code></pre> <h4>h文件</h4> <pre><code class="language-cpp">#pragma once class CComboBoxDialog : public CSkinDialog { public: enum { IDC_CHECKBOX1 = 101, IDC_CHECKBOX2 = 102, }; public: CComboBoxDialog(const tstring&amp;amp; strXml); public: virtual void OnInitDialog(); protected: LRESULT OnComboBoxSelChange(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;ComboBoxDialog.h&amp;quot; SKINUI_BEGIN_MESSAGE_MAP(CComboBoxDialog, CSkinDialog) ON_SKINUI_MESSAGE(WM_COMBOBOX_SEL_CHANGE, OnComboBoxSelChange) SKINUI_END_MESSAGE_MAP() CComboBoxDialog::CComboBoxDialog(const tstring&amp;amp; strXml) : CSkinDialog(strXml) { } void CComboBoxDialog::OnInitDialog() { CSkinDialog::OnInitDialog(); } LRESULT CComboBoxDialog::OnComboBoxSelChange(WPARAM wParam, LPARAM lParam) { CSkinComboBox* pComboBox = reinterpret_cast&amp;lt;CSkinComboBox*&amp;gt;(lParam); if(pComboBox) { MsgBox(SkinUI::StringFormat(_T(&amp;quot;OnComboBoxSelChange,Id=%d,CurSel=%d, CurText=%s!&amp;quot;), wParam, pComboBox-&amp;gt;GetCurSel(), pComboBox-&amp;gt;GetText().c_str())); } return 1L; }</code></pre>

页面列表

ITEM_HTML