选择框
<p>选择框CComboBox,继承于CFlexLayout,支持CFlexLayout的所有属性和方法。CComboBox通常由编辑框和按钮组合而成,并支持CEditView的所有属性。</p>
<h2>1 属性和相关方法</h2>
<h4>1.1 设置可选项</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Content="IDS_MALE,IDS_FEMALE"
Content="IDS_MALE:male,IDS_FEMALE:female"</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">LONG AddContent(const String& strText, const String& strValue = String());</code></pre></li>
</ul>
<h4>1.2 设置当前选中</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">CurSel="1"</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="100"</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_CHANGE</h4>
<p>下拉列表框选中项发生变化时,会给所在窗口发送自定义消息WM_COMBOBOX_CHANGE。</p>
<p>参考下面的示例代码:</p>
<pre><code class="language-cpp">void CComboBar::Notify(CView* pView)
{
LONG nNewSel = pView->GetId();
if(pView && m_pComboBox && m_pComboBox->GetCurSel() != nNewSel)
{
m_pComboBox->SetCurSel(nNewSel);
GetOwner()->SendMessage(WM_COMBOBOX_CHANGE, m_pComboBox->GetId(), reinterpret_cast<LPARAM>(m_pComboBox));
}
PostMessage(WM_CLOSE);
}</code></pre>
<h2>请看下面的示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/5.0/3/ComboBox.png" alt="下拉列表框" /></p>
<h4>普通选择框</h4>
<pre><code class="language-xml"><ComboBox Width="200" Height="30" Layout="ComboBox.xml" Background="Edit.png" ReadOnly="true" Tips="请选择" Content="男,女" AlignParentLeft="0" AlignParentVertCenter="0"/></code></pre>
<h4>Text-Value选择框</h4>
<pre><code class="language-xml"><ComboBox Width="200" Height="30" Layout="ComboBox.xml" Background="Edit.png" ReadOnly="true" Tips="请选择" Content="男:male,女:female" AlignParentLeft="0" AlignParentVertCenter="0"/></code></pre>
<h4>定制化选择框</h4>
<pre><code class="language-xml"><GenderComboBox Width="200" Height="30" Layout="ComboBox.xml" Background="Edit.png" ReadOnly="true" Tips="请选择" Content="男:male,女:female" AlignParentLeft="0" AlignParentVertCenter="0"/></code></pre>
<h4>可响应命令消息选择框</h4>
<pre><code class="language-xml"><AccountComboBox Width="200" Height="30" Layout="ComboBox.xml" Background="Edit.png" ReadOnly="true" Tips="请选择" Content="账号1:account1,账号2:account2,账号3:account3,账号4:account4,账号5:account5,账号6:account6,账号7:account7,账号8:account8,账号9:account9" AlignParentLeft="0" AlignParentVertCenter="0"/></code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CDemoComboBoxLayout : public CScrollLayout
{
public:
CDemoComboBoxLayout(CView* pParent);
public:
virtual void OnBuildFinish();
protected:
void OnComboBoxChange(LONG nId, CComboBox* pComboBox, BOOL& bHandle);
SKINUI_DECLARE_MESSAGE_MAP()
SKINUI_DECLARE_DYNCREATE(CDemoComboBoxLayout, CScrollLayout)
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include <stdafx.h>
#include "DemoComboBoxLayout.h"
SKINUI_BEGIN_MESSAGE_MAP(CDemoComboBoxLayout, CScrollLayout)
ON_SKINUI_WM_COMBOBOX_CHANGE()
SKINUI_END_MESSAGE_MAP()
CDemoComboBoxLayout::CDemoComboBoxLayout(CView* pParent)
: CScrollLayout(pParent)
{
}
void CDemoComboBoxLayout::OnBuildFinish()
{
CScrollLayout::OnBuildFinish();
}
void CDemoComboBoxLayout::OnComboBoxChange(LONG nId, CComboBox* pComboBox, BOOL& bHandle)
{
bHandle = TRUE;
GetOwner()->Toast(_T("Text = ") + pComboBox->GetText() + _T(",Value = ") + pComboBox->GetValue());
}</code></pre>