SkinUI入门教程

SkinUI入门教程


3.3 超链

<p>超链由CSkinHyperlink类来代表,继承于CSkinTextView,支持CSkinTextView的所有属性和方法。</p> <h2>1 属性和相关方法</h2> <h4>1.1 设置超链激活状态的字体</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">HotFontStyle=&amp;quot;ID_FONT_HYPERLINK&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetHotFontStyle(const tstring&amp;amp; strFontStyle);</code></pre></li> </ul> <h4>1.2 设置超链激活状态字体的颜色</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">HotFontColor=&amp;quot;ID_COLOR_HYPERLINK&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetHotFontColor(const tstring&amp;amp; strFontColor);</code></pre></li> </ul> <h4>1.3 设置超链的链接URL</h4> <ul> <li>通过XML属性控制如下: <pre><code class="language-xml">URL=&amp;quot;www.baidu.com&amp;quot;</code></pre></li> <li>通过C++程序代码调用方法控制如下: <pre><code class="language-c">void SetUrl(const tstring&amp;amp; strUrl);</code></pre></li> </ul> <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 CSkinHyperlink::HandleLButtonUp(CPoint point) { CSkinTextView::HandleLButtonUp(point); if(GetState() == VS_PRESS_DOWN) { if(!m_strUrl.empty()) { ::ShellExecuteW(GetOwner()-&amp;gt;GetHWND(), _T(&amp;quot;open&amp;quot;), m_strUrl.c_str(), NULL, NULL, SW_SHOWNORMAL); } else if(GetId() != 0) { GetOwner()-&amp;gt;PostMessage(WM_COMMAND, GetId(), reinterpret_cast&amp;lt;LPARAM&amp;gt;(this)); } } SetState(VS_MOUSE_OVER); RedrawView(); }</code></pre> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/3/3/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_SHOW3&amp;quot; Animation=&amp;quot;SizeChange&amp;quot;&amp;gt; &amp;lt;SkinHyperlink Id=&amp;quot;101&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; Text=&amp;quot;IDS_CONTROL_SHOW_TEXT4&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;50&amp;quot;/&amp;gt; &amp;lt;SkinHyperlink Id=&amp;quot;102&amp;quot; LayoutWidth=&amp;quot;120&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; Text=&amp;quot;IDS_CONTROL_SHOW_TEXT5&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;125&amp;quot;/&amp;gt; &amp;lt;SkinHyperlink Id=&amp;quot;103&amp;quot; LayoutWidth=&amp;quot;WrapContent&amp;quot; LayoutHeight=&amp;quot;30&amp;quot; Text=&amp;quot;IDS_CONTROL_SHOW_TEXT6&amp;quot; URL=&amp;quot;www.baidu.com&amp;quot; AlignParentHorizontalCenter=&amp;quot;0&amp;quot; AlignParentTop=&amp;quot;200&amp;quot;/&amp;gt; &amp;lt;/SkinDialog&amp;gt;</code></pre> <h4>h文件</h4> <pre><code class="language-cpp">#pragma once class CHyperlinkDialog : public CSkinDialog { public: enum { IDC_HYPERLINK1 = 101, IDC_HYPERLINK2 = 102, }; public: CHyperlinkDialog(const tstring&amp;amp; strXml); public: virtual void OnInitDialog(); protected: void OnHyperlinkClicked(UINT uNotifyCode, int nID, CSkinView* pView); SKINUI_DECLARE_MESSAGE_MAP() };</code></pre> <h4>cpp文件</h4> <pre><code class="language-cpp">#include &amp;quot;stdafx.h&amp;quot; #include &amp;quot;HyperlinkDialog.h&amp;quot; SKINUI_BEGIN_MESSAGE_MAP(CHyperlinkDialog, CSkinDialog) ON_SKINUI_COMMAND(IDC_HYPERLINK1, OnHyperlinkClicked) ON_SKINUI_COMMAND(IDC_HYPERLINK2, OnHyperlinkClicked) SKINUI_END_MESSAGE_MAP() CHyperlinkDialog::CHyperlinkDialog(const tstring&amp;amp; strXml) : CSkinDialog(strXml) { } void CHyperlinkDialog::OnInitDialog() { CSkinDialog::OnInitDialog(); } void CHyperlinkDialog::OnHyperlinkClicked(UINT uNotifyCode, int nID, CSkinView* pView) { MsgBox(SkinUI::StringFormat(_T(&amp;quot;OnHyperlinkClicked,Id=%d!&amp;quot;), nID)); }</code></pre>

页面列表

ITEM_HTML