用 VC++ 調用最小的瀏覽器內核創建一個簡易的瀏覽器

文章介紹

目前最小的瀏覽器內核是龍泉寺掃地僧基於Chromium二次封裝後,體積比原來縮小十幾倍的Miniblink,本文章將介紹如何使用神僧封裝的Miniblink開發一款非常實用並且體積非常小的瀏覽器,Miniblink編譯輸出的是C語言接口,可以在不同的語言間導入調用,甚至包括國內著名程序語言“易語言”,只需要用到不多的接口即可創建一個非常流暢的瀏覽器。

內核下載

官方主頁:https://miniblink.net/
內核最新版本下載:https://github.com/weolar/miniblink49/releases
本文章所使用版本:下載鏈接
內核源碼:https://github.com/weolar/miniblink49

教程說明

本文章使用VisualStudio裏提供的VC++來進行演示,使用Miniblink不需要用到過多的操作,只要把下載好壓縮包裏的頭文件wke.h複製到我們的工程目錄下,在程序內部導入此頭文件即可調用到Miniblink提供的API函數,因爲Miniblink是以動態鏈接庫的方式調用的,在我們運行程序之前還需要複製壓縮包裏的node.dll到程序項目生成目錄下,wke.h頭文件裏會自動導入此庫。

需要注意的是調用Miniblink提供的接口時,絕對不能誇線程調用的,我們在窗口消息線程調用即可,如果一定要在其他線程調用,建議使用發送窗口消息(SendMessage,PostMessage)形式來進行調用即可,這不是Miniblink內核本身的問題,算是一種線程安全的基本常識吧。

用Miniblink創建一個簡易的瀏覽器非常簡單,如果用到的功能單一,只是打開一個顯示頁面,用到以下幾個API即可。

API 說明
wkeInitialize 導入動態鏈接庫node.dll,初始化Miniblink的接口
wkeCreateWebWindow 創建瀏覽器窗口,返回可操作該頁面的接口指針
wkeOnWindowDestroy 綁定瀏覽器窗口的銷燬事件,用於處理程序的退出
wkeGetWindowHandle 通過操作指針(wkeWebView)來獲取創建後的窗口句柄
wkeMoveToCenter 把瀏覽器窗口移動到屏幕中心的位置
wkeShowWindow 顯示或隱藏創建後的瀏覽器窗口
wkeLoadURL 讓瀏覽器窗口視圖加載指定頁面地址

這裏只介紹幾個常用到的API,如果想知道更多其他的東西可以到官方頁面查看更多API說明信息

我們先用VisualStudio創建一個空的項目,項目名稱爲mb_simple_demo,位置可以選擇自己常用的目錄下即可。
在這裏插入圖片描述
項目創建完成後,因爲我們的瀏覽器需要用到窗口界面,所以需要把我們的項目配置裏的配置屬性->鏈接器->系統->子系統修改成窗口屬性,
在這裏插入圖片描述
做完以上步驟後我們就可以開始創建一個非常簡單的瀏覽器了,在“源文件”篩選器下創建一個C++源碼文件main.cpp
在這裏插入圖片描述
接下來源碼部分非常簡單,幾十行代碼即可完成創建了,是不是很方便呢?

main.cpp

//在下載好的Miniblink壓縮包裏可以找到此頭文件,把其複製到我們的工程源碼目錄下即可
//複製完成後,再把壓縮文件下的node.dll複製到項目生成目錄,Miniblink開發環境便完成搭建
#include "wke.h"

wkeWebView	G_WebView = NULL;		//Miniblink瀏覽器視圖指針
HWND		G_WindHandle = NULL;	//瀏覽器窗口的窗口句柄

//消息循環分發
void MessageLoop() {
	MSG v_Message = { 0 };
	while (GetMessage(&v_Message, NULL, 0, 0))
	{
		TranslateMessage(&v_Message);
		DispatchMessage(&v_Message);
	}
}

//瀏覽器窗口銷燬回調函數,在行36處執行綁定到瀏覽器窗口後有效。
void onWindowDestroy(wkeWebView webWindow, void* param) {
	PostQuitMessage(0);
}

int __stdcall WinMain(
	HINSTANCE hInstance,
	HINSTANCE hPrevInstance,
	LPSTR lpCmdLine,
	int nCmdShow
) {
	//這個API函數用於導入動態鏈接庫node.dll,初始化Miniblink的接口
	wkeInitialize();

	//Miniblink接口初始化完成後,我們就可以直接開始創建一個簡單的瀏覽器窗口
	G_WebView = wkeCreateWebWindow(wkeWindowType::WKE_WINDOW_TYPE_POPUP, NULL, 0, 0, 1024, 700);

	//綁定窗口銷燬事件,用於退出整個程序
	wkeOnWindowDestroy(G_WebView, onWindowDestroy, NULL);

	//窗口創建完成後通過這個接口我們就可以獲取到窗口句柄
	G_WindHandle = wkeGetWindowHandle(G_WebView);

	//調用此API把剛剛創建的瀏覽器創建移動到屏幕中間
	wkeMoveToCenter(G_WebView);

	//之後我們還需要調用此API把窗口顯示下
	wkeShowWindow(G_WebView, TRUE);

	//這裏讓瀏覽器窗口打開我們指定的頁面即可
	wkeLoadURL(G_WebView, "https://www.csdn.net");

	//運行Windows消息循環,處理與用戶交互的消息,這裏會阻塞直到瀏覽器窗口銷燬後運行PostQuitMessage(0)執行程序最後的退出步驟
	MessageLoop();

	return 0;
}

原創不易,轉載請註明出處

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章