WIN32 应用程序内嵌IE浏览器(注意非MFC)

原文地址:http://blog.163.com/fyz_seven/blog/static/1552536302011520105756360/

直接上代码: 后面附带注释 (代码是我从网上搜下来的,然后经过我的机器调试,并且编译通过的)

本文用到了COM组件的相关知识,ATL的相关知识

#include <atlbase.h>
CComModule _Module;
#include <atlwin.h>
#include <windows.h>
#pragma comment(lib,"atl")
#pragma comment(lib,"User32.lib")


LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
 RECT rc;
 IWebBrowser2* iWebBrowser;
 VARIANT varMyURL;
 static CAxWindow WinContainer;
 LPOLESTR pszName=OLESTR("shell.Explorer.2");
 GetClientRect(hWnd, &rc);
 switch(message)
 {
 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.163.com/"));
  iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
  VariantClear(&varMyURL); 
  iWebBrowser-> Release(); 
  break;
 case WM_SIZE:
  break;
 case WM_DESTROY:
  PostQuitMessage(0);
  break;
 default:
  return (int)DefWindowProc(hWnd,message,wParam,lParam);
 }
 return 0;
 }


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
 static TCHAR szAppName[]=TEXT("WebBrowser");
 static TCHAR szClassName[]=TEXT("WebBrowser");
 HWND hWnd;
 MSG msg;
 WNDCLASS wndclass;
 wndclass.style=CS_HREDRAW | CS_VREDRAW;
 wndclass.lpfnWndProc=WndProc;
 wndclass.cbClsExtra=0;
 wndclass.cbWndExtra=0;
 wndclass.hInstance=hInstance;
 wndclass.hIcon=LoadIcon(hInstance, IDI_APPLICATION);
 wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
 wndclass.lpszMenuName=NULL;
 wndclass.lpszClassName=szClassName;

 if(!RegisterClass(&wndclass))
 {
  MessageBox(NULL,TEXT("Error!"),szAppName,MB_ICONERROR);
  return 0;
 }

 //HRESULT hRes = _Module.Init(NULL, hInstance);
 GUID guid; 
 HRESULT hRes = _Module.Init(NULL, hInstance, &guid);

 hWnd=CreateWindow(szClassName,szAppName,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);
 ShowWindow(hWnd,nShowCmd);
 UpdateWindow(hWnd);

 while(GetMessage(&msg, NULL, 0, 0))
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }
 return msg.wParam;
}

 

工程:很简单,我用的是 VS2005 建立一个WIN32工程,注意是空项目,建立后,什么也没有!这时候你可以向里面增加一个CPP文件,然后将代码拷贝过去!编译运行!

需要注意:项目->右键->属性->配置属性选项下 ->ATL属性下 选择"静态链接到ATL"

解析:

黑色字体的地方就不解释了,如果不熟悉去看下Win32的搭建(不要看MFC,MFC将这些封装的死死的,你很不容易看见的,遇见不熟悉的的语句,可以去百度或者GOOGLE搜索一下,你懂的)

彩色字体的地方

CComModule _Module; 
GUID guid; 
 HRESULT hRes = _Module.Init(NULL, hInstance, &guid);

以上就是COM模块的初始化,具体干些什么我也不懂,有朋友解释一下最好!如果没有他的话会报错误"就是那种初始化的错误(当然,我是指你使用ATL静态链接的时候)",还有接下来我们需要使用ATL的一些东西,所有,还是需要初始化这个模块的!

红色字体部分

IWebBrowser2* iWebBrowser;  浏览器的核心,获取的这个指针,你就相当于控制了整个IE,比如IE的基本操作,跳转,向前,向后,等等!其实怎么获取它,是我们的一个难题!它就是一个ACTIVE对象!

 static CAxWindow WinContainer; ACTIVE对象的容器,这个容器存放ACTIVE对象,重要的是,我认为,他可以将ACTIVE和WIN32窗口关联起来,这可是个纽带啊!

WinContainer.Create(hWnd, rc, 0,WS_CHILD |WS_VISIBLE); 看见了吧,hWnd正是你这个Win32窗口的句柄

LPOLESTR pszName=OLESTR("shell.Explorer.2");   这个是通过那个字符串获取了IE的字符串,有兴趣的同学需要梳理一下这里,GUID ,CLSID, LIBID, IID, CATID 看下有好处的,我回过头来也应该看看这些,弄清晰些!注册表啊,注册表!

WinContainer.CreateControl(pszName);  这里开始创建该类名对应的Actvie控件了

WinContainer.QueryControl(__uuidof(IWebBrowser2),(void**)&iWebBrowser); 这里要查询并获取IWebBrowser2这个指针了!__uuidof这个关键字很强大啊,他可以根据类名获取其对应的ID号。注意我这里只是获取IWebBrowser指针,你当然可以获取其他的Active对象指针!只不过第一个参数的ID和第二个对象要对应上哦!当然还要跟你CreateControl所创建Active对象有关喽。你要创建什么Active对象,找好对应关系吧啊!我是这样理解的!

VariantInit(&varMyURL);
  varMyURL.vt = VT_BSTR; 
  varMyURL.bstrVal = SysAllocString(_T("
http://www.163.com/"));
  iWebBrowser-> Navigate2(&varMyURL,0,0,0,0);
  VariantClear(&varMyURL); 

这些就是该对应的具体应用了!
  iWebBrowser-> Release();  //计数减少!就这样吧!这个应该不用写到这里吧! 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值