链接
<p>超链CHyperlink,继承于CTextView,支持CTextView的所有属性和方法。</p>
<h2>属性和相关方法</h2>
<h4>设置超链的链接URL</h4>
<ul>
<li>通过XML属性控制如下:</li>
</ul>
<pre><code class="language-xml">URL="www.baidu.com"</code></pre>
<ul>
<li>通过C++程序代码调用方法控制如下:</li>
</ul>
<pre><code class="language-c">void SetURL(const String& strURL);</code></pre>
<h2>2 消息处理</h2>
<h4>2.1 WM_COMMAND消息</h4>
<p>单击链接,鼠标左键抬起时,有两种情况:</p>
<ul>
<li>如果是URL,直接调用系统默认浏览器打开这个URL;</li>
<li>如果不是URL且Id不为0,会给链接所在的窗口发送WM_COMMAND消息。</li>
</ul>
<p>请参考下面的示例代码:</p>
<pre><code class="language-cpp">void CHyperlink::HandleLButtonUp(CPoint point, BOOL& bHandle)
{
CTextView::HandleLButtonUp(point, bHandle);
if(GetState() == PRESSED)
{
if(!m_strURL.empty())
{
SkinUI::OpenURL(m_strURL, GetOwner());
}
else if(GetId() != 0)
{
GetOwner()->PostMessage(WM_COMMAND, GetId(), reinterpret_cast<LPARAM>(this));
}
}
SetState(HOVER);
Redraw();
}</code></pre>
<h2>示例</h2>
<h4>效果图</h4>
<p><img src="http://www.skinui.cn/doc/img/5.0/3/Hyperlink.png" alt="超链" /></p>
<h4>布局文件</h4>
<pre><code class="language-xml"><FlexLayout>
<TextView Width="MatchParent" Height="60" HorzAlign="Center" Text="IDS_CONTROL3_2" Font="ID_FONT_H4"/>
<Line Width="MatchParent" Height="1" Margin="0,0,0,20"/>
<RelativeLayout Width="MatchParent" Height="30" Layout="SeparatorLine.xml" ChildText11="发送命令消息"/>
<RelativeLayout Width="MatchParent" Height="80">
<Hyperlink Id="1001" Width="WrapContent" Height="20" AlignParentLeft="40" AlignParentTop="10" Text="单击我,发送命令消息" />
</RelativeLayout>
<RelativeLayout Width="MatchParent" Height="30" Layout="SeparatorLine.xml" ChildText11="用本地浏览器打开URL"/>
<RelativeLayout Width="MatchParent" Height="80">
<Hyperlink Width="WrapContent" Height="20" AlignParentLeft="40" AlignParentTop="10" Text="百度一下,你就知道" URL="www.baidu.com"/>
</RelativeLayout>
</FlexLayout></code></pre>
<h4>h文件</h4>
<pre><code class="language-cpp">#pragma once
class CDemoHyperlinkLayout : public CScrollLayout
{
public:
enum
{
IDC_HYPERLINK = 1001,
};
public:
CDemoHyperlinkLayout(CView* pParent);
public:
virtual void OnBuildFinish();
protected:
void OnHyperlinkClicked(UINT uNotifyCode, int nID, CView* pView);
SKINUI_DECLARE_MESSAGE_MAP()
SKINUI_DECLARE_DYNCREATE(CDemoHyperlinkLayout, CScrollLayout)
};</code></pre>
<h4>cpp文件</h4>
<pre><code class="language-cpp">#include <stdafx.h>
#include "DemoHyperlinkLayout.h"
SKINUI_BEGIN_MESSAGE_MAP(CDemoHyperlinkLayout, CScrollLayout)
ON_SKINUI_COMMAND(IDC_HYPERLINK, OnHyperlinkClicked)
SKINUI_END_MESSAGE_MAP()
CDemoHyperlinkLayout::CDemoHyperlinkLayout(CView* pParent)
: CScrollLayout(pParent)
{
}
void CDemoHyperlinkLayout::OnBuildFinish()
{
CScrollLayout::OnBuildFinish();
}
void CDemoHyperlinkLayout::OnHyperlinkClicked(UINT uNotifyCode, int nID, CView* pView)
{
GetOwner()->MsgBox(_T("链接被点击了"));
}</code></pre>