cocos2d-x win32平台嵌入浏览器—IWebBrowser2的使用
2014-10-26 21:46
369 查看
这一篇暂时不会涉及到cocos2d-x的内容,只是先用win32 api以及IWebBrowser2这个com组件来创建一个浏览器应用,这边所用的开发工具还是用vs2010。
打开vs2010,文件->新建->项目->Visual C++->Win32项目,项目的名称就接点地气,取名为Cocos2dxWebBrowser,一路下一步直到完成。自动完成的向导会生成Cocos2dxWebBrowser.cpp这个文件,在这个文件的开头处加入以下代码
找到WndProc这个窗口函数,加入以下变量
CAxWindow是一个ActiveX控件,ActiveX控件这玩意知名度最高的估计是Flash插件以及Flash播放器。这边过多的细节就不展开,这边只要记住需要用这个ActiveX窗口做为浏览器的容器。
接着再在swicth中加入WM_CREATE消息和创建浏览器的代码
以上先用CAxWindow创建一个窗体,该窗体作为当前窗体的子窗体,接着根据之前COM组件的名字来创建一个控件(也许是组件),这个名字也就是shell.Explorer.2,即IE浏览器的COM名字,下一步是把生成好的控件的指针赋值给iWebBrowser,通过指针的指针方式来赋值。
以上是为varMyURL这个VARIANT这个变量赋值,赋值的过程是要先初始化,接着把类型申明为字符串类型也就是VT_BSTR,最终用SysAllocString分配了一段字符串。这边过多细节可以不必深入,只要知道具体怎么用就好了,因为不是奔着COM来的。
最后调用IWebBrowser2的Navigate2来打开URL,以及一些收尾的工作。
自此用win32 api创建浏览器的过程就完成了,各位可以编译试试看。
大家可以去下载这个工程的完整代码来玩玩Cocos2dxWebBrowser
打开vs2010,文件->新建->项目->Visual C++->Win32项目,项目的名称就接点地气,取名为Cocos2dxWebBrowser,一路下一步直到完成。自动完成的向导会生成Cocos2dxWebBrowser.cpp这个文件,在这个文件的开头处加入以下代码
#include "stdafx.h" #include "Cocos2dxWebBrowser.h" //以下代码就是要加的头文件以及需要导入的库文件 #include <atlbase.h> #include <atlwin.h> #include <windows.h> #pragma comment(lib,"atl") #pragma comment(lib,"User32.lib") CComModule _Module; //这个是必要的,不要忘记
找到WndProc这个窗口函数,加入以下变量
RECT rc; IWebBrowser2* iWebBrowser; VARIANT varMyURL; static CAxWindow WinContainer; LPOLESTR pszName = OLESTR("shell.Explorer.2"); GetClientRect(hWnd, &rc);
static CAxWindow WinContainer;
CAxWindow是一个ActiveX控件,ActiveX控件这玩意知名度最高的估计是Flash插件以及Flash播放器。这边过多的细节就不展开,这边只要记住需要用这个ActiveX窗口做为浏览器的容器。
LPOLESTR pszName = OLESTR("shell.Explorer.2");这边所做的只是字符串之间的转换,如果你了解win32 sdk中关于Unicode和 Ascii的各种恩怨情仇,这句话你就能明白。当然这种恩怨情仇各种初学者都经历过。
GetClientRect(hWnd, &rc);这一句更是经典的获取当前窗口客户区大小的函数,所谓的客户区是指去掉标题栏、菜单栏以及状态栏之后的可见区域。当你按照向导生成的代码,编译运行后会看到一个菜单栏加一块白色的区域,那个白色的区域就是客户区。
VARIANT varMyURL;VARIANT顾名思义就是变量的意思,这个变量是对当前语言体系中所有变量在类层次上的分装,待会会为这个变量分配一个字符串,用它来表示需要打开的URL。
接着再在swicth中加入WM_CREATE消息和创建浏览器的代码
case WM_CREATE:{ 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(_T("http://www.baidu.com")); iWebBrowser-> Navigate2(&varMyURL,0,0,0,0); VariantClear(&varMyURL); iWebBrowser-> Release(); }
WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE); WinContainer.CreateControl(pszName); WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser);
以上先用CAxWindow创建一个窗体,该窗体作为当前窗体的子窗体,接着根据之前COM组件的名字来创建一个控件(也许是组件),这个名字也就是shell.Explorer.2,即IE浏览器的COM名字,下一步是把生成好的控件的指针赋值给iWebBrowser,通过指针的指针方式来赋值。
VariantInit(&varMyURL); varMyURL.vt = VT_BSTR; varMyURL.bstrVal = SysAllocString(_T("http://www.baidu.com"));
以上是为varMyURL这个VARIANT这个变量赋值,赋值的过程是要先初始化,接着把类型申明为字符串类型也就是VT_BSTR,最终用SysAllocString分配了一段字符串。这边过多细节可以不必深入,只要知道具体怎么用就好了,因为不是奔着COM来的。
iWebBrowser-> Navigate2(&varMyURL,0,0,0,0); VariantClear(&varMyURL); iWebBrowser-> Release();
最后调用IWebBrowser2的Navigate2来打开URL,以及一些收尾的工作。
自此用win32 api创建浏览器的过程就完成了,各位可以编译试试看。
大家可以去下载这个工程的完整代码来玩玩Cocos2dxWebBrowser
相关文章推荐
- win32下cocos2d-x使用默认浏览器加载网页
- Win32平台如何编译使用Google test编写的单元测试?
- 【转】使用nmake在win32平台下编译xapian
- Cocos2dx之使用cygwin移植win32项目到Android平台
- cocos2d-x学习使用笔记一(从win32开始。。。下载、安装、配置、hello world篇)
- cocos2d-x在Android双平台上嵌入WebView
- C# 互操作性入门系列(二):使用平台调用调用Win32 函数
- 使用平台调用调用Win32 函数
- C#互操作性入门系列(二):使用平台调用调用Win32 函数 推荐
- 各浏览器下使用 OBJECT 元素和 EMBED 元素嵌入 Flash 存在差异
- WPF 使用HwndHost嵌入Win32后,无法接受Mouse_Move\Mouse_Leave消息
- 如何在win32平台上创建新的cocos2d-x项目
- Cocos2d-x 2.0 在Windows平台下的使用
- HO8001: 各浏览器下使用 OBJECT 元素和 EMBED 元素嵌入 Flash 存在差异
- 一个服务程序框架,并在vc6.0win32控制台工程中嵌入manifest使用uac
- Cocos2d-x win32代码转换成Android平台
- cocos2d-2.0-x-2.0.3多平台环境搭建(android, win32)
- win32平台下:cocos2d-x中继承并重写CCTextFieldTTF类,实现密码框输入时,*显示
- cocos2d-x下使用ShareSDK进行微博分享之iOS平台
- [技术学习]使用 wine 在Unix平台进行 WIN32/MFC 开发