分享個Duilib中基於wke的瀏覽器控制元件
概述
wke是基於谷歌chrome瀏覽器原始碼的裁剪版本,大小僅僅只有10M左右,無需依賴其他的擴充套件庫(跟CEF的一大堆大約40M的DLL來比簡直爽呆了),就可以在本地使用谷歌核心快速載入網頁。網上也有基於wke在Duilib 上擴充套件的控制元件程式碼,其實wke標頭檔案挺清楚的了,介面一目瞭然,特別是JS與C++互動的函式更是容易看懂,也沒什麼難的,你也可以做到的。
程式碼
畢竟是裁剪庫,有的功能還是沒有介面來處理的(比如網頁載入前、頁面跳轉、選單訊息……),標頭檔案程式碼:
- #ifndef __UIWKEWEBKIT_H_
-
#define __UIWKEWEBKIT_H_
- #pragma once
- #include "wke.h"
- #include <string>
- using std::wstring;
- namespace DuiLib
- {
- ///////////////////////////////////////////
- //網頁載入狀態改變的回撥
- class CWkeWebkitLoadCallback
- {
- public:
- virtualvoid OnLoadFailed()=0;
- virtualvoid OnLoadComplete()=0;
-
virtualvoid OnDocumentReady()=0;
- };
- ///////////////////////////////////////////
- //網頁標題、地址改變的回撥
- class CWkeWebkitClientCallback
- {
- public:
- virtualvoid OnTitleChange(const CDuiString& strTitle)=0;
- virtualvoid OnUrlChange(const CDuiString& strUrl)=0;
- };
- class CWkeWebkitUI :
-
public CControlUI,
- public wkeBufHandler
- {
- public:
- CWkeWebkitUI(void);
- ~CWkeWebkitUI(void);
- virtualvoid onBufUpdated (constHDC hdc,int x, int y, int cx, int cy);
- virtualLPCTSTR GetClass()const;
- virtualLPVOID GetInterface(LPCTSTR pstrName);
- virtualvoid DoEvent(TEventUI& event);
- virtualvoid DoPaint(HDC hDC, const RECT& rcPaint);
- virtualvoid SetPos(RECT rc);
- virtualvoid DoInit();
- virtualvoid SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- //////////////////////////////////////
- const wstring& GetUrl()const ;
- bool CanGoBack() const;
- bool GoBack();
- bool CanGoForward() const;
- bool GoForward();
- void StopLoad();
- void Refresh();
- wkeWebView GetWebView();
- void SetLoadCallback(CWkeWebkitLoadCallback* pCallback);
- CWkeWebkitLoadCallback* GetLoadCallback();
- void Navigate(LPCTSTR lpUrl);
- void LoadFile(LPCTSTR lpFile);
- void LoadHtml(LPCTSTR lpHtml);
- protected:
- void StartCheckThread();
- void StopCheckThread();
- staticvoid OnTitleChange(conststruct _wkeClientHandler* clientHandler, const wkeString title);
- staticvoid OnUrlChange(conststruct _wkeClientHandler* clientHandler, const wkeString url);
- private:
- staticint m_bWebkitCount;
- HANDLE m_hCheckThread;
- wstring m_strUrl;
- wkeWebView m_pWebView;
- wkeClientHandler m_ClientHandler;
- CWkeWebkitLoadCallback* m_pLoadCallback;
- CWkeWebkitClientCallback* m_pClientCallback;
- };
- }
- #endif//__UIWKEWEBKIT_H_
實現部分程式碼:
- #include "StdAfx.h"
- #include "UIWkeWebkit.h"
- #pragma comment(lib, "DuiEx/wke/wke")
- namespace DuiLib{
- ///////////////////////////////////////////////////
- //網頁載入狀態監測執行緒
- DWORD WINAPI CheckThreadFun(LPVOID lpParam)
- {
- CWkeWebkitUI* pWebkitUI=(CWkeWebkitUI*)lpParam;
- wkeWebView pWebView=pWebkitUI->GetWebView();
- if ( NULL == pWebView )
- return 1;
- CWkeWebkitLoadCallback* pCallback=pWebkitUI->GetLoadCallback();
- if ( NULL == pCallback )
- return 1;
- bool bOver=false;
- while( !pWebView->isLoaded() )
- {
- if ( !bOver && pWebView->isDocumentReady() )
- {
- pCallback->OnDocumentReady();
- bOver=true;
- }
- if ( pWebView->isLoadFailed() )
- {
- pCallback->OnLoadFailed();
- return 1;
- }
- ::Sleep(30);
- }
-
相關推薦
分享個Duilib中基於wke的瀏覽器控制元件
概述 wke是基於谷歌chrome瀏覽器原始碼的裁剪版本,大小僅僅只有10M左右,無需依賴其他的擴充套件庫(跟CEF的一大堆大約40M的DLL來比簡直爽呆了),就可以在本地使用谷歌核心快速載入網頁。網上也有基於wke在Duilib 上擴充套件的控制元件程式碼,其
基於wke封裝的duilib的webkit瀏覽器控制元件,可以c++與js互交,原始碼及demo下載地址
轉載請說明原出處,謝謝~~ 前些日子用wke核心封裝了duilib的webkit瀏覽器控制元件,好多群裡朋友私聊我希望可以我公佈原始碼,今天把這個控制元件的原始碼和使用demo公佈。其實這個控制元件封裝起來沒什麼難度,我只是按照原來作者的demo,把相應的訊息
duilib中將xml封裝為控制元件簡單示例(簡單自定義控制元件,封裝幾個基本控制元件合為1個自定義控制元件)
使用duilib的時候,難免會有這樣的需求: 某一塊Container(Layout)以及裡面的佈局需要重複用,不想每次都複製貼上這麼多,要不然xml太大了; 通過繼承來自定義一個控制元件,比如CButtonUIEx之類的,想讓他像button一樣在xml中被識別; xml裡面的東西
WPF中使用瀏覽器控制元件WebBrowser
設定使用IE的版本 public static class Extensions { #region 設定WebBroswer 使用IE版本 public static void SetWebBrowserFeatures(int i
duilib Webkit核心dui化瀏覽器控制元件
改進: 1、跟其他duilib控制元件一樣,不包含視窗 2、將onURLChanged和onTitleChanged傳送到到Notify裡處理 效果: 不足的地方: 1、改變大小時會閃屏(等大神來改進) 2、contextMenuEv
儲存瀏覽器控制元件中的網頁
如果需要呼叫預設的儲存對話方塊,可以呼叫IDM_SAVE命令儲存網頁 。由於安全原因,這個命令會總是顯示一個檔案儲存對話方塊,呼叫命令的時候指定OLECMDEXECOPT_DONTPROMPTUSER時也不例外。這也意味著IDM_SAVE的文件中的描述是錯誤的。注意儲存為mh
分享我們專案中基於EF事務機制的架構
寫在前面: 1. 本文中單元測試用到的資料庫,在執行測試之前,會被清空,即使用空資料庫。 2. 本文中的單元測試都是正確通過的。 要理解EF的事務機制,首先要理解這2個類:TransactionScope和DbContext。 DbContext是我們的資料庫,通常我們會建一個類MyProjectDb
Winform呼叫WebKitBrowser,基於chrome核心WebKit的瀏覽器控制元件
在C#中,預設的WebBrowser控制元件預設使用的是IE的core,而IE的種種遭人吐槽的詬病使我不敢輕易使用WebBrowser,因此,打算使用Chrome的核心替換IE。Chrome的核心使用的是WebKit,顯而易見,我們這裡就將使用WebKit來實現Winfo
WindowsXamlHost:在 WPF 中使用 UWP 的控制元件(Windows Community Toolkit)
原文 WindowsXamlHost:在 WPF 中使用 UWP 的控制元件(Windows Community Toolkit) Windows Community Toolkit 再次更新到 5.0。以前可以在 WPF 中使用有限的 UWP 控制元件,而現在有了 WindowsXamlHost,則可以使
React-Native開發中常用的第三方控制元件持續更新
筆者簡書:https://www.jianshu.com/u/8ba7c349861d, 歡迎大家關注 2018.8.23更新: 動態修改Android的softmodule: react-native-android-keyboard-adjust
分享一個Winform下的分頁控制元件
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
把WebBrowser瀏覽器控制元件添加當前控制元件並註冊js方法呼叫C#程式碼
1 把WebBrowser瀏覽器外掛新增到當前控制元件集 string url = "a.html"; webBrowser = new ChromiumWebBrowser(url); webBrowser.Dock =
Android工程師開發iOS之與Android中對應功能的控制元件
iOS中和安卓控制元件應用還是差不的,從控制元件的命名上我們就能看出來,下面來介紹一下吧: ios中UILabel 對應Android 中TextView ios中UIImage對應Android 中ImageView 圖片控制元件 ios中UIButton對應An
VS程式設計,編輯WPF過程中,點選設計器中介面某一控制元件,在XAML中高亮突出顯示相應的控制元件程式碼的設定方法。
在編輯製件WPF過程中,當介面中控制元件較多時,可通過點選設計器中具體的控制元件,從而中在xaml程式碼視窗中快速跳轉到對應的部分。為了突出顯示該部分控制元件程式碼的名稱,方便視覺上直觀的觀察到被選中的控制元件對應的XAML程式碼,可以在VS中設定:選中控制元件後,高亮顯示對應的XAML
VS程式設計,WPF中,通過telerik控制元件建立顏色選擇器,顏色拾取器,調色盤的一種方法
這裡展示使用telerik控制元件時,呼叫顏色調色盤,顏色選擇器,顏色拾取器的一種方法 1、增加引用 2、前臺定義引用 xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
一起Talk Android吧(第一百回:Android中使用自定義控制元件)
各位看官們,大家好,上一回中咱們說的是Android中使用自定義佈局的例子,這一回說的例子是Android中使用自定義控制元件。閒話休提,言歸正轉。讓我們一起Talk Android吧! 看官們,我們在上一回中通過自定義佈局巧妙地實現了分隔線,不過這個分隔線中看
CefSharp.v49.0.1瀏覽器控制元件完全WPF版,實現禁止彈出新視窗,在同一視窗開啟連結,並且支援帶type="POST" target="_blank"的連結
需求場景:在查詢頁面,填寫查詢條件,查詢條件包括上傳的圖片,根據圖片的特徵查詢,這就需要在提交的時候,使用POST提交,因為GET提交無法提交圖片資料,提交查詢條件之後,在新的視窗展示查詢結果。(當然查詢結果頁面可能不支援F5重新整理頁面) 表單HTML程式碼示意(注意metho
opencv筆記(三十五)——MFC中如何重新整理static控制元件
在MFC中用快取技術進行繪圖完全可以做到不閃爍,下面是在對話方塊應用程式OnPaint函式else分支中的程式碼,顯示一行文字,僅用來測試: CWnd * pWndShow; CDC * pDCShow; pWndShow = GetDlgItem(IDC_STC_DRA
jQuery中toggle()函式的應用總結(包含今天專案中碰到的前端控制元件)
本人是一名後臺開發人員,然而公司專案沒有做到前後端分離,前端僅僅是寫靜態頁面,js還得後臺開發人員寫。對於前端的東西呢常見東西的是沒有問題,但是有些東西用的少可能容易忘記。這不今天接手維護另一個同事的一個模組就被安排了。有問題怎麼辦?W3s!jquery語法上的
QT中的UI介面控制元件隨視窗自適應變化大小
QT5中的UI介面 控制元件隨視窗自適應變化大小 點選UI介面檔案控制元件間的空白區域,然後選擇工具中的柵格佈局(網格佈局),點選後,它會自動調整你的控制元件大小,預設將你的widget的框長