天天看點

win32中建立webbrowser控件

    因工作需要,需要在win32中建立webbrowser,不要問我為什麼不直接用MFC,我很煩MFC,win32很直接和簡潔。

    言歸正傳,網上流傳有一些關于win32中建立webbrowser的代碼,會彈一個窗出來:

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

繼續閱讀