Directx遊戲中嵌入IE瀏覽器實現過程
提示:文章寫完後,目錄可以自動生成,如何生成可參考右邊的幫助文件
文章目錄
前言
因為近期有需求需要在D3D遊戲中嵌入IE瀏覽器,先不說具體有什麼用,先說如何實現,我們都知道D3D引擎主流實現方法是UI渲染和D3D模型分別渲染,IE瀏覽器如果說使用核心重寫的話,通過D3D UI介面通過渲染來實現,比較麻煩,但是我可以通過IWebBrowser2介面通過Activex外掛方式來嵌入瀏覽器, 對於不是特別複雜的要求,完全可以滿足我們的需要,下面就開始。
一、為什麼不使用MFC方式嵌入瀏覽器到D3D遊戲中?
我們都知道,D3D一般都使用標準WINDOWS庫,而且MFC共享庫和標準庫標頭檔案同時引用會出現很多莫名奇妙的問題,為了保持程式碼純淨和便於維護,我們不使用MFC嵌入IE瀏覽器到D3D遊戲中去。我們使用標準WINDOW庫建立視窗。
二、使用步驟
1.引入標頭檔案 (主要使用到IWebBrowser2介面和CComModule容器)
#include <ExDisp.h>
#include <atlbase.h>
#include <atlwin.h>
//建立IE介面變數和控制元件容器 可以在類中,也可以在全域性定義
CComModule _Module;
IWebBrowser2* iWebBrowser;
GUID Guid;
2.匯入庫檔案
程式碼如下(示例):
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")
3.建立WINDOW視窗
此時要注意,我們建立的視窗D3D遊戲視窗的子視窗,所以必須拿到遊戲主程式的控制程式碼和例項,拿到以後建立視窗,程式碼如下:
//引數分別為 遊戲主程式例項,視窗資源ID,遊戲主程式控制程式碼,和IE視窗訊息回撥函式,此處我們暫時使用 CreateDialog 通過視窗資源ID建立資源的方式建立視窗。
//g_hInst是遊戲例項,_g_hWnd是遊戲程式控制程式碼
HWND m_hWndIExploerDlg=CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_IEXPLOERDIALOG), _g_hWnd, IExploerDlgProc );
3.建立ActiveX IE控制元件容器
為什麼要建立這個容器,因為C++建立的視窗,如果使用了ActiveX控制元件的話,必須使用容器來包裹ActiveX控制元件,然後視窗才可以成功載入,定義容器
//全域性定義 放在CPP標頭檔案下部,類定義前面
BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()
static CAxWindow WinContainer;
4.將IE控制元件繫結到容器
RECT rc;
GetClientRect(m_hWndIExploerDlg, &rc);
LPOLESTR pszName=OLESTR("shell.Explorer.2");
_Module.Init(ObjectMap,g_hInst,&Guid);
WinContainer.Create(m_hWndIExploerDlg, rc, 0,WS_CHILD |WS_VISIBLE);
WinContainer.CreateControl(pszName);
WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
5.設定IE控制元件URL 注意wchar_t 到char的轉換
char * Url = “http://www.gansu.com/”;
wchar_t * Urlwchar = char2wchar(Url);
VARIANT varMyURL;
VariantInit(&varMyURL);
varMyURL.vt = VT_BSTR;
varMyURL.bstrVal = SysAllocString(Urlwchar);
iWebBrowser->Navigate2(&varMyURL,0,0,0,0);
VariantClear(&varMyURL);
6. IE視窗訊息回撥函式定義
INT_PTR CALLBACK IExploerDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
INT_PTR CALLBACK IExploerDlgProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
switch(message)
{
case WM_INITDIALOG:
case WM_CREATE:
{
}
return TRUE;
case WM_SETFONT:
case DS_SETFONT:
case DS_SHELLFONT:
{
}
return TRUE;
case WM_CLOSE:
{
IEDLGMGR->ShowIExplorerDialog(FALSE);
}
return TRUE;
}
return FALSE;
}
7. 在需要的地方,顯示和隱藏IE外掛
if(!m_hWndIExploerDlg) return;
if(bShow)
{
ShowWindow( m_hWndIExploerDlg, SW_SHOW);
}
else
{
ShowWindow( m_hWndIExploerDlg, SW_HIDE);
}
總結
然後就可以在D3D遊戲中嵌入IE視窗了,IE核心和使用者的IE版本保持保持一致的,可以通過IWebBrowser2介面進行POST和GET以及與遊戲物件和記憶體以及網路進行互動,可以實現充值等操作。
相關文章
- ie瀏覽器怎麼升級 ie瀏覽器版本過低怎麼辦瀏覽器
- microsoft edge是ie瀏覽器嗎 edge瀏覽器和ie瀏覽器一樣嗎ROS瀏覽器
- IE瀏覽器相容瀏覽器
- 瀏覽器渲染網頁的過程瀏覽器網頁
- 瀏覽器EventLoop執行過程解析瀏覽器OOP
- 瀏覽器頁面載入過程瀏覽器
- 怎麼調出ie瀏覽器_win10 ie瀏覽器怎麼調出來瀏覽器Win10
- edge是什麼瀏覽器 microsoft edge是ie瀏覽器嗎瀏覽器ROS
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以瀏覽器谷歌
- ie瀏覽器開啟變成別的瀏覽器怎麼辦 開啟ie瀏覽器變成360怎麼改瀏覽器
- IE瀏覽器版本的判斷瀏覽器
- 微軟IE瀏覽器正式退役微軟瀏覽器
- IE瀏覽器外掛開發瀏覽器
- ie瀏覽器相容模式怎麼設定在哪裡 ie瀏覽器相容模式設定方法瀏覽器模式
- ie瀏覽器退役後還能用嗎 ie瀏覽器關閉停用以後怎麼辦瀏覽器
- win10 ie11瀏覽器版本過低怎麼升級_win10 ie11瀏覽器版本過低升級如何操作Win10IE11瀏覽器
- java中通過servle4t實現瀏覽器伺服器的Java瀏覽器伺服器
- edge怎麼改成ie 怎麼把預設瀏覽器從edge恢復到ie瀏覽器瀏覽器
- win10有沒有ie瀏覽器?win10系統怎麼開啟ie瀏覽器Win10瀏覽器
- ie瀏覽器退役後還能用嗎 ie瀏覽器停止更新服務以後有影響嗎瀏覽器
- ie瀏覽器在電腦哪裡 電腦自帶的ie瀏覽器怎麼開啟使用瀏覽器
- JavaScript 判斷IE瀏覽器的版本包括IE11JavaScript瀏覽器IE11
- 瀏覽器渲染過程與原理淺析(一)瀏覽器
- 透過 Chrome 深入理解瀏覽器導航過程Chrome瀏覽器
- win10如何解除安裝ie瀏覽器_win10怎麼解除安裝ie瀏覽器Win10瀏覽器
- 瀏覽器和伺服器之前的加密解密過程瀏覽器伺服器加密解密
- 桌面瀏覽器微軟Edge取代IE瀏覽器 市場份額升至9.84%瀏覽器微軟
- win10沒有ie瀏覽器怎麼處理_window10找不到ie瀏覽器如何解決Win10瀏覽器
- win10怎麼升級ie瀏覽器_win10自帶的ie瀏覽器怎麼升級Win10瀏覽器
- ie瀏覽器開啟怎麼是360導航 ie每次開啟都是360瀏覽器怎麼解決瀏覽器
- win10電腦中IE瀏覽器不見了怎麼辦_win10系統ie瀏覽器不見了如何找回Win10瀏覽器
- JS實現瀏覽器列印WordJS瀏覽器
- 劍網3雲遊戲首次測試開放 移動端瀏覽器雲遊戲2020實現遊戲瀏覽器
- win10預設瀏覽器edge怎樣切換成IE win10系統把預設瀏覽器edge改為ie瀏覽器的教程Win10瀏覽器
- Win10系統IE瀏覽器經常卡死怎麼辦 win10系統中ie瀏覽器總是假死如何修復Win10瀏覽器
- win10怎麼更新ie瀏覽器_win10升級更新ie瀏覽器到最新版的方法Win10瀏覽器
- win10怎麼清理ie瀏覽器快取_win10清理ie瀏覽器快取檔案的方法Win10瀏覽器快取
- ie瀏覽器打不開網頁怎麼辦 網路正常但是ie瀏覽器打不開解決方法瀏覽器網頁