3.8 编辑框
<p>编辑框由CSkinEditView类来代表,分为单行编辑框和多行编辑框,继承于CSkinScrollView,支持CSkinScrollView的所有属性和方法。</p>
<h2>1 属性和相关方法</h2>
<h4>1.1 设置是否为多行编辑框</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">MultiLine=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetMultiLine(BOOL bMultiLine);</code></pre></li>
</ul>
<h4>1.2 设置是否为富文本编辑框</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">RichEdit=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetRichEdit(BOOL bRichEdit);</code></pre></li>
</ul>
<h4>1.3 设置是否自动大写</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">UpperCase=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetUpperCase(BOOL bUpperCase);</code></pre></li>
</ul>
<h4>1.4 设置是否自动小写</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">LowerCase=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetLowerCase(BOOL bLowerCase);</code></pre></li>
</ul>
<h4>1.5 设置是否密码框</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Password=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetPassword(BOOL bPassword);</code></pre></li>
</ul>
<h4>1.6 设置是否为只读编辑框</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">ReadOnly=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetReadOnly(BOOL bReadOnly);</code></pre></li>
</ul>
<h4>1.7 设置是否只允许输入数字</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Number=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetNumber(BOOL bNumber);</code></pre></li>
</ul>
<h4>1.8 设置字符数限制</h4>
<ul>
<li>通过XML属性控制如下:
<pre><code class="language-xml">Limit=&quot;true&quot;</code></pre></li>
<li>通过C++程序代码调用方法控制如下:
<pre><code class="language-c">void SetLimit(LONG nLimit);</code></pre></li>
</ul>
<h4>1.9 插入文本、图片和链接</h4>
<ul>
<li>通过C++程序代码插入文本、图片和链接如下:
<pre><code class="language-c">void InsertText(const tstring&amp; strText, BOOL bHighlight = FALSE);
void InsertText(const tstring&amp; strText, LONG nAfter, BOOL bHighlight = FALSE);
void AppendText(const tstring&amp; strText, BOOL bHighlight = FALSE);
void InsertImage(const tstring&amp; strImage);
void InsertImage(const tstring&amp; strImage, LONG nAfter);
void AppendImage(const tstring&amp; strImage);
void InsertHyperlink(const tstring&amp; strHyperlink, UINT nCommandId, BOOL bHighlight = FALSE);
void InsertHyperlink(const tstring&amp; strHyperlink, LONG nAfter, UINT nCommandId, BOOL bHighlight = FALSE);
void AppendHyperlink(const tstring&amp; strHyperlink, UINT nCommandId, BOOL bHighlight = FALSE);</code></pre></li>
</ul>
<h2>2 消息处理</h2>
<h4>2.1 WM_EDIT_TEXT_CHANGE消息</h4>
<p>编辑框文本发生变化时,会给所在窗口发送自定义消息WM_EDIT_TEXT_CHANGE。</p>
<p>参考下面的示例代码:</p>
<pre><code class="language-cpp">void CSkinEditViewImpl::NotifyEditTextChange()
{
CSkinEditView* pEditView = GetEditView();
if(pEditView)
{
CSkinDialog* pOwner = pEditView-&gt;GetOwner();
if(pOwner &amp;&amp; pOwner-&gt;IsInitDialogFinish())
{
pOwner-&gt;PostMessage(WM_EDIT_TEXT_CHANGE, pEditView-&gt;GetId(), reinterpret_cast&lt;LPARAM&gt;(pEditView));
}
}
}</code></pre>
<h2>请看下面的示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/3/8/1.png" alt="编辑框" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml">&lt;SkinDialog DefaultWidth=&quot;400&quot; DefaultHeight=&quot;600&quot; SysButton=&quot;CLOSE&quot; Icon=&quot;128&quot; Caption=&quot;IDS_CONTROL_SHOW8&quot; Animation=&quot;SizeChange&quot;&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;UpperCase&quot; UpperCase=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;50&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;LowerCase&quot; LowerCase=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;90&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;Password&quot; Password=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;130&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;ReadOnly&quot; ReadOnly=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;170&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;Number&quot; Number=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;210&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;28&quot; Image=&quot;Edit.png&quot; Tips=&quot;Limit&quot; Limit=&quot;10&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;250&quot;/&gt;
&lt;SkinEditView LayoutHeight=&quot;68&quot; Image=&quot;Edit.png&quot; Tips=&quot;MultiLine&quot; MultiLine=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;290&quot; VScrollBar=&quot;VScrollBar.xml&quot;/&gt;
&lt;SkinEditView Id=&quot;100&quot; AlignParentBottom=&quot;120&quot; Image=&quot;Edit.png&quot; Tips=&quot;RichEdit&quot; MultiLine=&quot;true&quot; RichEdit=&quot;true&quot; AlignParentLeft=&quot;50&quot; AlignParentRight=&quot;50&quot; AlignParentTop=&quot;370&quot; VScrollBar=&quot;VScrollBar.xml&quot;/&gt;
&lt;SkinButton Id=&quot;101&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;追加文本&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentLeft=&quot;50&quot; AlignParentBottom=&quot;70&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SkinButton Id=&quot;102&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;追加链接&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentHorizontalCenter=&quot;0&quot; AlignParentBottom=&quot;70&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SkinButton Id=&quot;103&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;追加图片&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentRight=&quot;50&quot; AlignParentBottom=&quot;70&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SkinButton Id=&quot;104&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;插入文本&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentLeft=&quot;50&quot; AlignParentBottom=&quot;20&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SkinButton Id=&quot;105&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;插入链接&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentHorizontalCenter=&quot;0&quot; AlignParentBottom=&quot;20&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;SkinButton Id=&quot;106&quot; LayoutWidth=&quot;WrapContent&quot; LayoutHeight=&quot;30&quot; ChildText1=&quot;插入图片&quot; Image=&quot;Button.png&quot; Layout=&quot;Button.xml&quot; AlignParentRight=&quot;50&quot; AlignParentBottom=&quot;20&quot; PressDownOffset=&quot;1&quot;/&gt;
&lt;/SkinDialog&gt;</code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CEditViewDialog : public CSkinDialog
{
public:
enum
{
IDC_EDITVIEW = 100,
IDC_BUTTON1 = 101,
IDC_BUTTON2 = 102,
IDC_BUTTON3 = 103,
IDC_BUTTON4 = 104,
IDC_BUTTON5 = 105,
IDC_BUTTON6 = 106,
ID_COMMAND_BEGIN = 1001,
ID_COMMAND_END = 10000,
};
public:
CEditViewDialog(const tstring&amp; strXml);
public:
virtual void OnInitDialog();
protected:
void OnBtnClickedAppendText(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedAppendHyperlink(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedAppendImage(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedInsertText(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedInsertHyperlink(UINT uNotifyCode, int nID, CSkinView* pView);
void OnBtnClickedInsertImage(UINT uNotifyCode, int nID, CSkinView* pView);
void OnHyperlinkClicked(UINT uNotifyCode, int nID, CSkinView* pView);
SKINUI_DECLARE_MESSAGE_MAP()
private:
CSkinEditView* m_pRichEditView;
LONG m_nCommandId;
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;EditViewDialog.h&quot;
SKINUI_BEGIN_MESSAGE_MAP(CEditViewDialog, CSkinDialog)
ON_SKINUI_COMMAND(IDC_BUTTON1, OnBtnClickedAppendText)
ON_SKINUI_COMMAND(IDC_BUTTON2, OnBtnClickedAppendHyperlink)
ON_SKINUI_COMMAND(IDC_BUTTON3, OnBtnClickedAppendImage)
ON_SKINUI_COMMAND(IDC_BUTTON4, OnBtnClickedInsertText)
ON_SKINUI_COMMAND(IDC_BUTTON5, OnBtnClickedInsertHyperlink)
ON_SKINUI_COMMAND(IDC_BUTTON6, OnBtnClickedInsertImage)
ON_SKINUI_COMMAND_RANGE(ID_COMMAND_BEGIN, ID_COMMAND_END, OnHyperlinkClicked)
SKINUI_END_MESSAGE_MAP()
CEditViewDialog::CEditViewDialog(const tstring&amp; strXml)
: CSkinDialog(strXml)
, m_pRichEditView(NULL)
, m_nCommandId(ID_COMMAND_BEGIN)
{
}
void CEditViewDialog::OnInitDialog()
{
CSkinDialog::OnInitDialog();
m_pRichEditView = static_cast&lt;CSkinEditView*&gt;(GetChildById(IDC_EDITVIEW));
}
void CEditViewDialog::OnBtnClickedAppendText(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;AppendText(_T(&quot; 我是文本 &quot;));
}
}
void CEditViewDialog::OnBtnClickedAppendHyperlink(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;AppendHyperlink(_T(&quot; 试试点击我 &quot;), m_nCommandId++);
}
}
void CEditViewDialog::OnBtnClickedAppendImage(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;AppendImage(_T(&quot;Emotion.gif &quot;));
}
}
void CEditViewDialog::OnBtnClickedInsertText(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;InsertText(_T(&quot; 我是文本 &quot;));
}
}
void CEditViewDialog::OnBtnClickedInsertHyperlink(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;InsertHyperlink(_T(&quot; 试试点击我 &quot;), m_nCommandId++);
}
}
void CEditViewDialog::OnBtnClickedInsertImage(UINT uNotifyCode, int nID, CSkinView* pView)
{
if(m_pRichEditView)
{
m_pRichEditView-&gt;InsertImage(_T(&quot;Emotion.gif&quot;));
}
}
void CEditViewDialog::OnHyperlinkClicked(UINT uNotifyCode, int nID, CSkinView* pView)
{
MsgBox(SkinUI::StringFormat(_T(&quot;OnHyperlinkClicked,Command Id=%d!&quot;), nID));
}</code></pre>