win32中创建webbrowser控件
2017-11-10 09:46
417 查看
因工作需要,需要在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);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
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();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
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
言归正传,网上流传有一些关于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);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
EndPaint(hWnd, &ps);
break;
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();
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
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
相关文章推荐
- Win32 创建控件风格不是Win XP解决方案
- win32创建控件的一些问题
- Win32 SDK程序创建一些控件(简单调用InitCommonControlsEx,并指定ICC_LISTVIEW_CLASSES控件就可以了)
- win32创建控件和提示文本
- 简单win32程序创建控件
- 利用WebBrowser控件创建自己的浏览器
- win32 创建控件
- MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应
- Win32 SDK创建RichEdit Control控件
- 利用WebBrowser控件创建自己的浏览器
- 【转】Win32 创建控件风格不是Win XP解决方案
- 利用WebBrowser控件创建自己的浏览器
- win32 控件按钮创建
- win32创建控件的一些问题
- Win32 创建控件风格不是Win XP解决方案
- 用C#和microsoft webbrowser控件创建自己的ie
- Win32 SDK程序创建一些控件
- 利用WebBrowser控件创建自己的浏览器
- win32 sdk下调用webbrowser控件
- delphi vcl win32控件的创建说明