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瀏覽器版本過低怎麼辦瀏覽器
- web中通過註釋判斷瀏覽器<!--[if !IE]><!--[if IE]><!--[if lt IE 6]><!--[if gte IE 6]>版本Web瀏覽器
- microsoft edge是ie瀏覽器嗎 edge瀏覽器和ie瀏覽器一樣嗎ROS瀏覽器
- IE瀏覽器相容瀏覽器
- IE瀏覽器 自定義地址協議的實現瀏覽器協議
- .net火狐瀏覽器 ie瀏覽器 判斷瀏覽器
- 惡搞IE瀏覽器瀏覽器
- IE瀏覽器開發瀏覽器
- IE瀏覽器版本過低簡單提示功能瀏覽器
- 全球瀏覽器現狀 IE還是老大瀏覽器
- WebKit 瀏覽器內幕之 瀏覽器特性/網頁渲染過程WebKit瀏覽器網頁
- 瀏覽器渲染網頁的過程瀏覽器網頁
- 瀏覽器頁面載入過程瀏覽器
- 瀏覽器EventLoop執行過程解析瀏覽器OOP
- 瀏覽器的渲染:過程與原理瀏覽器
- 微軟IE瀏覽器正式退役微軟瀏覽器
- c#控制IE瀏覽器C#瀏覽器
- IE 瀏覽器的創新瀏覽器
- IE瀏覽器的安全(轉)瀏覽器
- 模擬實現相容低版本IE瀏覽器的原生bind()瀏覽器
- java中通過servle4t實現瀏覽器伺服器的Java瀏覽器伺服器
- 怎麼調出ie瀏覽器_win10 ie瀏覽器怎麼調出來瀏覽器Win10
- Win10開啟IE瀏覽器方法 Win10怎麼用IE瀏覽器?Win10瀏覽器
- 瀏覽器渲染過程與效能優化瀏覽器優化
- edge是什麼瀏覽器 microsoft edge是ie瀏覽器嗎瀏覽器ROS
- ie瀏覽器開啟變成別的瀏覽器怎麼辦 開啟ie瀏覽器變成360怎麼改瀏覽器
- IE瀏覽器外掛開發瀏覽器
- IE瀏覽器版本的判斷瀏覽器
- VB操作IE瀏覽器完全控制瀏覽器
- IE瀏覽器下POST中文亂碼解決辦法 - PHP實現瀏覽器PHP
- ie瀏覽器退役後還能用嗎 ie瀏覽器關閉停用以後怎麼辦瀏覽器
- ie瀏覽器相容模式怎麼設定在哪裡 ie瀏覽器相容模式設定方法瀏覽器模式
- win10 ie11瀏覽器版本過低怎麼升級_win10 ie11瀏覽器版本過低升級如何操作Win10IE11瀏覽器
- 淺談在瀏覽器中輸入URL返回頁面的過程瀏覽器
- 瀏覽器渲染過程與原理淺析(一)瀏覽器
- Google瀏覽器Logo的誕生過程Go瀏覽器
- edge怎麼改成ie 怎麼把預設瀏覽器從edge恢復到ie瀏覽器瀏覽器
- 透過 Chrome 深入理解瀏覽器導航過程Chrome瀏覽器