编辑框
<p>编辑框由CSkinEditView类来代表,分为单行编辑框和多行编辑框,继承于CSkinScrollView,支持CSkinScrollView的所有属性和方法。</p>
<h2>属性和相关方法</h2>
<h4>设置是否为富文本编辑框</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">RichEdit="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetRichEdit(BOOL bRichEdit);</code></pre>
<h4>设置是否为多行编辑框</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">MultiLine="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetMultiLine(BOOL bMultiLine);</code></pre>
<h4>设置是否为只读编辑框</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">ReadOnly="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetReadOnly(BOOL bReadOnly);</code></pre>
<h4>设置字符数限制</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Limit="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetLimit(LONG nLimit);</code></pre>
<h4>设置是否自动大写</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">UpperCase="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetUpperCase(BOOL bUpperCase);</code></pre>
<h4>设置是否自动小写</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">LowerCase="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetLowerCase(BOOL bLowerCase);</code></pre>
<h4>设置是否帐号</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Account="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetAccount(BOOL bAccount);</code></pre>
<h4>设置是否密码</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Password="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetPassword(BOOL bPassword);</code></pre>
<h4>设置是否是英文名</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">EnglishName="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetEnglishName(BOOL bEnglishName);</code></pre>
<h4>设置是否仅允许输入字符</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Letter="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetLetter(BOOL bLetter);</code></pre>
<h4>设置是否手机号码</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Mobile="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetMobile(BOOL bMobile);</code></pre>
<h4>设置是否电话号码</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Phone="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetPhone(BOOL bPhone);</code></pre>
<h4>设置是否是邮件地址</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Email="true"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetEmail(BOOL bEmail);</code></pre>
<h4>设置文本</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Text="IDS_TEST"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetText(const String& strText);</code></pre>
<h4>设置字体</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">Font="ID_FONT_NORMAL"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetFont(const String& strTextFont, const String& strLinkFont = String());</code></pre>
<h4>设置链接字体</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">LinkFont="ID_FONT_NORMAL"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetFont(const String& strTextFont, const String& strLinkFont = String());</code></pre>
<h4>设置链接颜色</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">LinkColor="ID_COLOR_LINK"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetLinkColor(const String& strColor);</code></pre>
<h4>设置提示颜色</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">TipsColor="ID_COLOR_TIPS"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetTipsColor(const String& strTipsColor);</code></pre>
<h4>设置光标颜色</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">CaretColor="ID_COLOR_TEXT"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetCaretColor(const String& strCaretColor);</code></pre>
<h4>设置选中背景颜色</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">SelBkgColor="ID_COLOR_LINK"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetSelBkgColor(const String& strColor);</code></pre>
<h4>设置选中文本颜色</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">SelTextColor="ID_COLOR_WHITE"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetSelTextColor(const String& strColor);</code></pre>
<h4>插入文本、图片和链接</h4>
<ul>
<li>通过C++程序代码插入文本、图片和链接如下:</li>
</ul>
<pre><code class="language-c">void InsertText(const String& strText, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void InsertText(const String& strText, LONG nAfter, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void AppendText(const String& strText, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void InsertImage(const String& strImage, BOOL bClickOpen = FALSE, const CSize& szLayout = CSize(), const CSize& szMax = CSize(), const CSize& szMin = CSize());
void InsertImage(const String& strImage, LONG nAfter, BOOL bClickOpen = FALSE, const CSize& szLayout = CSize(), const CSize& szMax = CSize(), const CSize& szMin = CSize());
void AppendImage(const String& strImage, BOOL bClickOpen = FALSE, const CSize& szLayout = CSize(), const CSize& szMax = CSize(), const CSize& szMin = CSize());
void InsertHyperlink(const String& strText, const String& strUrl = String(), UINT nCommandId = 0, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void InsertHyperlink(const String& strText, LONG nAfter, const String& strUrl = String(), UINT nCommandId = 0, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void AppendHyperlink(const String& strText, const String& strUrl = String(), UINT nCommandId = 0, const String& strColor = String(), const String& strFont = String(), const String& strBkgColor = String());
void InsertView(CView* pView);
void InsertView(CView* pView, LONG nAfter);
void AppendView(CView* pView);
void InsertXML(const String& strXML);
void InsertXML(const String& strXML, LONG nAfter);
void AppendXML(const String& strXML);</code></pre>
<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 CEditView::NotifyEditTextChange()
{
GetOwner()->SendMessage(WM_EDIT_TEXT_CHANGE, GetId(), reinterpret_cast<LPARAM>(this));
}</code></pre>
<h2>请看下面的示例</h2>
<h4>单行编辑框</h4>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/5.0/3/EditView1.png" alt="编辑框" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml"><FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="ReadOnly"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" ReadOnly="true" Margin="0,10,0,0" Tips="只读"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Limit"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Limit="20" Margin="0,10,0,0" Tips="限制输入字数20"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="UpperCase"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" UpperCase="true" Margin="0,10,0,0" Tips="自动大写"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="LowerCase"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" LowerCase="true" Margin="0,10,0,0" Tips="自动小写"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Account"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Account="true" Margin="0,10,0,0" Tips="账号"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Password"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Password="true" Margin="0,10,0,0" Tips="密码"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="EnglishName"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" EnglishName="true" Margin="0,10,0,0" Tips="英文名"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Number"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Number="true" Margin="0,10,0,0" Tips="数字"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Letter"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Letter="true" Margin="0,10,0,0" Tips="字符"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Mobile"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Mobile="true" Margin="0,10,0,0" Tips="手机号码"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Phone"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Phone="true" Margin="0,10,0,0" Tips="固定电话"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<TextView Width="MatchParent" Height="WrapContent" Text="Email"/>
<EditView Width="MatchParent" Height="30" Background="Edit.png" Email="true" Margin="0,10,0,0" Tips="电子邮箱"/>
</FlexLayout></code></pre>
<h4>多行编辑框</h4>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/5.0/3/EditView2.png" alt="编辑框" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml"><FlexLayout Width="MatchParent" Height="WrapContent" Direction="Column" Margin="40,10,20,10">
<EditView Id="2000" Width="MatchParent" Height="500" Background="Edit.png" Margin="0,10,0,0" MultiLine="true"/>
</FlexLayout>
<FlexLayout Width="MatchParent" Height="WrapContent" Margin="40,0,20,20">
<Button Id="2001" Width="WrapContent" Height="WrapContent" Margin="0,0,20,0" Background="Button.png" Layout="Button.xml" ChildText11="插入文本"/>
<Button Id="2002" Width="WrapContent" Height="WrapContent" Margin="0,0,20,0" Background="Button.png" Layout="Button.xml" ChildText11="插入链接命令"/>
<Button Id="2003" Width="WrapContent" Height="WrapContent" Margin="0,0,20,0" Background="Button.png" Layout="Button.xml" ChildText11="插入链接URL"/>
<Button Id="2004" Width="WrapContent" Height="WrapContent" Margin="0,0,20,0" Background="Button.png" Layout="Button.xml" ChildText11="插入图片"/>
</FlexLayout></code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CDemoEditViewLayout : public CScrollLayout
{
public:
enum
{
IDC_EDITVIEW = 2000,
IDC_BUTTON_INSERT_TEXT = 2001,
IDC_BUTTON_INSERT_LINK_COMMAND = 2002,
IDC_BUTTON_INSERT_LINK_URL = 2003,
IDC_BUTTON_INSERT_IMAGE = 2004,
ID_COMMAD_OPEN = 1,
ID_COMMAD_OPEN_FOLDER = 2,
};
public:
CDemoEditViewLayout(CView* pParent);
public:
virtual void OnBuildFinish();
protected:
void OnBtnClickedInsertText(UINT uNotifyCode, int nID, CView* pView);
void OnBtnClickedInsertLinkCommand(UINT uNotifyCode, int nID, CView* pView);
void OnBtnClickedInsertLinkUrl(UINT uNotifyCode, int nID, CView* pView);
void OnBtnClickedInsertImage(UINT uNotifyCode, int nID, CView* pView);
void OnEditTextChange(LONG nId, CEditView* pEditView, BOOL& bHandle);
SKINUI_DECLARE_MESSAGE_MAP()
private:
CEditView* m_pEditView;
SKINUI_DECLARE_DYNCREATE(CDemoEditViewLayout, CScrollLayout)
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include <stdafx.h>
#include "DemoEditViewLayout.h"
SKINUI_BEGIN_MESSAGE_MAP(CDemoEditViewLayout, CScrollLayout)
ON_SKINUI_COMMAND(IDC_BUTTON_INSERT_TEXT, OnBtnClickedInsertText)
ON_SKINUI_COMMAND(IDC_BUTTON_INSERT_LINK_COMMAND, OnBtnClickedInsertLinkCommand)
ON_SKINUI_COMMAND(IDC_BUTTON_INSERT_LINK_URL, OnBtnClickedInsertLinkUrl)
ON_SKINUI_COMMAND(IDC_BUTTON_INSERT_IMAGE, OnBtnClickedInsertImage)
ON_SKINUI_WM_EDIT_TEXT_CHANGE()
SKINUI_END_MESSAGE_MAP()
CDemoEditViewLayout::CDemoEditViewLayout(CView* pParent)
: CScrollLayout(pParent)
, m_pEditView(NULL)
{
}
void CDemoEditViewLayout::OnBuildFinish()
{
CScrollLayout::OnBuildFinish();
m_pEditView = dynamic_cast<CEditView*>(GetChildById(IDC_EDITVIEW));
}
void CDemoEditViewLayout::OnBtnClickedInsertText(UINT uNotifyCode, int nID, CView* pView)
{
if(m_pEditView)
{
m_pEditView->InsertText(_T("文本"));
}
}
void CDemoEditViewLayout::OnBtnClickedInsertLinkCommand(UINT uNotifyCode, int nID, CView* pView)
{
if(m_pEditView)
{
m_pEditView->InsertHyperlink(_T("打开"), String(), ID_COMMAD_OPEN);
m_pEditView->InsertText(_T(" "));
m_pEditView->InsertHyperlink(_T("打开文件夹"), String(), ID_COMMAD_OPEN_FOLDER);
}
}
void CDemoEditViewLayout::OnBtnClickedInsertLinkUrl(UINT uNotifyCode, int nID, CView* pView)
{
if(m_pEditView)
{
m_pEditView->InsertHyperlink(_T("百度一下,你就知道"), _T("www.baidu.com"));
}
}
void CDemoEditViewLayout::OnBtnClickedInsertImage(UINT uNotifyCode, int nID, CView* pView)
{
if(m_pEditView)
{
m_pEditView->InsertImage(_T("Image.png"));
m_pEditView->InsertImage(_T("Image.gif"));
}
}
void CDemoEditViewLayout::OnEditTextChange(LONG nId, CEditView* pEditView, BOOL& bHandle)
{
bHandle = TRUE;
GetOwner()->Toast(_T("Text Change To: ") + pEditView->GetText());
}</code></pre>