SkinUI入门教程

SkinUI入门教程


3.20 Cef浏览器控件

<p>Cef浏览器控件由CSkinCefView类来代表,继承于CSkinView,支持CSkinView的所有属性和方法。</p> <h2>1 属性和相关方法</h2> <h4>1.1 设置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 LoadURL(const tstring&amp;amp; strURL);</code></pre></li> </ul> <h2>请看下面的示例</h2> <h4>效果图</h4> <p><img src="http://www.skinui.cn/doc/img/3/20/1.png" alt="Cef浏览器控件" /></p> <h4>布局文件</h4> <pre><code class="language-xml">&amp;lt;SkinDialog DefaultWidth=&amp;quot;500&amp;quot; DefaultHeight=&amp;quot;480&amp;quot; SysButton=&amp;quot;CLOSE&amp;quot; Icon=&amp;quot;128&amp;quot; Caption=&amp;quot;IDS_CONTROL_SHOW20&amp;quot;&amp;gt; &amp;lt;CefWebView Id=&amp;quot;101&amp;quot; LayoutWidth=&amp;quot;225&amp;quot; AlignParentLeft=&amp;quot;15&amp;quot; AlignParentTop=&amp;quot;45&amp;quot; AlignParentBottom=&amp;quot;15&amp;quot;/&amp;gt; &amp;lt;SkinRelativeLayout Id=&amp;quot;102&amp;quot; ToRightOf=&amp;quot;101,15&amp;quot; AlignParentRight=&amp;quot;15&amp;quot; AlignParentTop=&amp;quot;61&amp;quot; AlignParentBottom=&amp;quot;15&amp;quot;&amp;gt; &amp;lt;SkinButton Id=&amp;quot;201&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(1个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;0&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;202&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(2个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;42&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;203&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(3个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;84&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;204&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(4个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;126&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;205&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(5个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;168&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;206&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(6个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;210&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;207&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(7个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;252&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;208&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(8个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;294&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;SkinButton Id=&amp;quot;209&amp;quot; LayoutWidth=&amp;quot;FillParent&amp;quot; LayoutHeight=&amp;quot;22&amp;quot; ChildText1=&amp;quot;C++调用JS方法(9个参数)&amp;quot; Image=&amp;quot;Button.png&amp;quot; Layout=&amp;quot;Button.xml&amp;quot; AlignParentTop=&amp;quot;336&amp;quot; PressDownOffset=&amp;quot;1&amp;quot;/&amp;gt; &amp;lt;/SkinRelativeLayout&amp;gt; &amp;lt;/SkinDialog&amp;gt;</code></pre> <h4>h文件</h4> <pre><code class="language-cpp">#pragma once class CCefWebView : public CSkinCefView { public: CCefWebView(CSkinView* pParent); SKINUI_DECLARE_DYNCREATE() public: void OnFunction1Param(const tstring&amp;amp; param1); void OnFunction2Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2); void OnFunction3Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3); void OnFunction4Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4); void OnFunction5Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5); void OnFunction6Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6); void OnFunction7Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7); void OnFunction8Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7, const tstring&amp;amp; param8); void OnFunction9Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7, const tstring&amp;amp; param8, const tstring&amp;amp; param9); SKINUI_DECLARE_EXTENSION_MESSAGE_MAP() }; class CCefWebDialog : public CSkinDialog { public: enum { IDC_WEBVIEW = 101, IDC_BUTTON1 = 201, IDC_BUTTON2 = 202, IDC_BUTTON3 = 203, IDC_BUTTON4 = 204, IDC_BUTTON5 = 205, IDC_BUTTON6 = 206, IDC_BUTTON7 = 207, IDC_BUTTON8 = 208, IDC_BUTTON9 = 209, }; public: CCefWebDialog(const tstring&amp;amp; strXml); public: virtual void OnInitDialog(); protected: void OnBtnClicked(UINT uNotifyCode, int nID, CSkinView* pView); SKINUI_DECLARE_MESSAGE_MAP() private: CCefWebView* m_pCefWebView; };</code></pre> <h4>CefWebView.cpp</h4> <pre><code class="language-cpp">#include &amp;quot;stdafx.h&amp;quot; #include &amp;quot;CefWebDialog.h&amp;quot; SKINUI_IMPLEMENT_DYNCREATE(CCefWebView) SKINUI_BEGIN_EXTENSION_MESSAGE_MAP(CCefWebView, CSkinCefView) ON_SKINUI_EXTENSION_MESSAGE(Function1Param, OnFunction1Param) ON_SKINUI_EXTENSION_MESSAGE(Function2Param, OnFunction2Param) ON_SKINUI_EXTENSION_MESSAGE(Function3Param, OnFunction3Param) ON_SKINUI_EXTENSION_MESSAGE(Function4Param, OnFunction4Param) ON_SKINUI_EXTENSION_MESSAGE(Function5Param, OnFunction5Param) ON_SKINUI_EXTENSION_MESSAGE(Function6Param, OnFunction6Param) ON_SKINUI_EXTENSION_MESSAGE(Function7Param, OnFunction7Param) ON_SKINUI_EXTENSION_MESSAGE(Function8Param, OnFunction8Param) ON_SKINUI_EXTENSION_MESSAGE(Function9Param, OnFunction9Param) SKINUI_END_EXTENSION_MESSAGE_MAP() CCefWebView::CCefWebView(CSkinView* pParent) : CSkinCefView(pParent) { } void CCefWebView::OnFunction1Param(const tstring&amp;amp; param1) { tstring str = param1; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction2Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction3Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction4Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction5Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; str += _T(&amp;quot;\r\n&amp;quot;) + param5; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction6Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; str += _T(&amp;quot;\r\n&amp;quot;) + param5; str += _T(&amp;quot;\r\n&amp;quot;) + param6; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction7Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; str += _T(&amp;quot;\r\n&amp;quot;) + param5; str += _T(&amp;quot;\r\n&amp;quot;) + param6; str += _T(&amp;quot;\r\n&amp;quot;) + param7; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction8Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7, const tstring&amp;amp; param8) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; str += _T(&amp;quot;\r\n&amp;quot;) + param5; str += _T(&amp;quot;\r\n&amp;quot;) + param6; str += _T(&amp;quot;\r\n&amp;quot;) + param7; str += _T(&amp;quot;\r\n&amp;quot;) + param8; GetOwner()-&amp;gt;MsgBox(str); } void CCefWebView::OnFunction9Param(const tstring&amp;amp; param1, const tstring&amp;amp; param2, const tstring&amp;amp; param3, const tstring&amp;amp; param4, const tstring&amp;amp; param5, const tstring&amp;amp; param6, const tstring&amp;amp; param7, const tstring&amp;amp; param8, const tstring&amp;amp; param9) { tstring str = param1; str += _T(&amp;quot;\r\n&amp;quot;) + param2; str += _T(&amp;quot;\r\n&amp;quot;) + param3; str += _T(&amp;quot;\r\n&amp;quot;) + param4; str += _T(&amp;quot;\r\n&amp;quot;) + param5; str += _T(&amp;quot;\r\n&amp;quot;) + param6; str += _T(&amp;quot;\r\n&amp;quot;) + param7; str += _T(&amp;quot;\r\n&amp;quot;) + param8; str += _T(&amp;quot;\r\n&amp;quot;) + param9; GetOwner()-&amp;gt;MsgBox(str); }</code></pre> <h4>CefWebDialog.cpp</h4> <pre><code class="language-cpp">#include &amp;quot;stdafx.h&amp;quot; #include &amp;quot;CefWebDialog.h&amp;quot; SKINUI_BEGIN_MESSAGE_MAP(CCefWebDialog, CSkinDialog) ON_SKINUI_COMMAND_RANGE(IDC_BUTTON1, IDC_BUTTON9, OnBtnClicked) SKINUI_END_MESSAGE_MAP() CCefWebDialog::CCefWebDialog(const tstring&amp;amp; strXml) : CSkinDialog(strXml) , m_pCefWebView(NULL) { } void CCefWebDialog::OnInitDialog() { CSkinDialog::OnInitDialog(); m_pCefWebView = static_cast&amp;lt;CCefWebView*&amp;gt;(GetChildById(IDC_WEBVIEW)); if(m_pCefWebView) { tstring strURL = GetCurModulePath() + _T(&amp;quot;web\\SkinUI.html&amp;quot;); m_pCefWebView-&amp;gt;LoadURL(strURL); } } void CCefWebDialog::OnBtnClicked(UINT uNotifyCode, int nID, CSkinView* pView) { if(m_pCefWebView) { tstring strJavaScript; if(nID == IDC_BUTTON1) { strJavaScript = _T(&amp;quot;Function1Param('11111');&amp;quot;); } else if(nID == IDC_BUTTON2) { strJavaScript = _T(&amp;quot;Function2Param('11111', '22222');&amp;quot;); } else if(nID == IDC_BUTTON3) { strJavaScript = _T(&amp;quot;Function3Param('11111', '22222', '33333');&amp;quot;); } else if(nID == IDC_BUTTON4) { strJavaScript = _T(&amp;quot;Function4Param('11111', '22222', '33333', '44444');&amp;quot;); } else if(nID == IDC_BUTTON5) { strJavaScript = _T(&amp;quot;Function5Param('11111', '22222', '33333', '44444', '55555');&amp;quot;); } else if(nID == IDC_BUTTON6) { strJavaScript = _T(&amp;quot;Function6Param('11111', '22222', '33333', '44444', '555555', '66666');&amp;quot;); } else if(nID == IDC_BUTTON7) { strJavaScript = _T(&amp;quot;Function7Param('11111', '22222', '33333', '44444', '55555', '66666', '77777');&amp;quot;); } else if(nID == IDC_BUTTON8) { strJavaScript = _T(&amp;quot;Function8Param('11111', '22222', '33333', '44444', '55555', '66666', '77777', '88888');&amp;quot;); } else if(nID == IDC_BUTTON9) { strJavaScript = _T(&amp;quot;Function9Param('11111', '22222', '33333', '44444', '55555', '66666', '77777', '88888', '99999');&amp;quot;); } m_pCefWebView-&amp;gt;RunJavaScript(strJavaScript); } }</code></pre>

页面列表

ITEM_HTML