因工作需要,需要在win32中建立webbrowser,不要問我為什麼不直接用MFC,我很煩MFC,win32很直接和簡潔。
言歸正傳,網上流傳有一些關于win32中建立webbrowser的代碼,會彈一個窗出來:

是因為CComModule _Module沒有初始化。解決辦法就是
_Module.Init(ObjectMap, hInst,&guid);
參見資料1.
網上給出的代碼還有個問題就是url串的類型,類型轉換問題:
原文:SysAllocString(_T("www.baidu.com"))
修改後:SysAllocString(L"www.baidu.com")
因為要用WCHAR,即寬字元類型串,要用L。
關鍵代碼如下:
#include "stdafx.h"
#include "ad.h"
#include <atlbase.h>
#include <atlcom.h>
CComModule _Module;
#include <atlwin.h>
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")
#define MAX_LOADSTRING 100
// 全局變量:
HINSTANCE hInst; // 目前執行個體
TCHAR szTitle[MAX_LOADSTRING]; // 标題欄文本
TCHAR szWindowClass[MAX_LOADSTRING]; // 主視窗類名
BEGIN_OBJECT_MAP(ObjectMap)
END_OBJECT_MAP()
/* 其他win32 标磚應用程式模闆*/
//貼一下回調函數
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
//*********************
RECT rc;
IWebBrowser2* iWebBrowser;
VARIANT varMyURL;
static CAxWindow WinContainer;
LPOLESTR pszName=OLESTR("shell.Explorer.2");
GetClientRect(hWnd, &rc);
GUID guid;
WCHAR *a=L"www.baidu.com";
//**********************
switch (message)
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// 分析菜單選擇:
switch (wmId)
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意繪圖代碼...
EndPaint(hWnd, &ps);
case WM_CREATE:
_Module.Init(ObjectMap, hInst,&guid);
WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE);
WinContainer.CreateControl(pszName);
WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
VariantInit(&varMyURL);
varMyURL.vt = VT_BSTR;
varMyURL.bstrVal = SysAllocString(L"http://www.baidu.com");
iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
VariantClear(&varMyURL);
iWebBrowser-> Release();
case WM_DESTROY:
PostQuitMessage(0);
return 0;
參考資料:
1.Add ATL support to win32-based application
http://blog.csdn.net/huntstream/article/details/7311667
2.win32 sdk下調用webbrowser控件的代碼
http://wenku.baidu.com/view/ccdcccc06137ee06eff918dc.html