因工作需要,需要在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