WebBrowser2的应用
来源:互联网 发布:mac桌面消失 编辑:程序博客网 时间:2024/05/16 00:47
使用方法,选择菜单 Project -> Add to Project -> Components and controls…,在弹出的对话框中选择Registered ActiveX Controls文件夹,然后选中列表中的Microfost Web 浏览控件。或者编辑对话框资源时,右键单击选择Insert ActiveX控件选项,也可以在列表中选择该控件
主要功能:
第一:浏览网页
利用控件的Navigate接口,原型如下:
void CWebBrowser2::Navigate(LPCTSTR URL, VARIANT* Flags, VARIANT* TargetFrameName, VARIANT* PostData, VARIANT* Headers)
只要第一个参数填上html文件的全路径名(不能使用相对路径名),其余的参数可以为NULL。
说起来这是一个很普通的功能,但是有时候灵活使用却也会收到很多意想不到的效果,比如:
>>美化界面:设计一张很酷的网页用这个控件显示出来可以增加界面的美感
>>播放音乐:在网页中播放音乐(mid或wav),同时把控件隐藏起来,则可以实现程序背景音乐的播放。示例html文件:
<html>
<bgsound src="bksound.mid" loop="-1">
<body></body>
</html>
>>播放视频:可以支持asf和mpeg格式
>>显示图片:利用web浏览器可以简单地显示gif、jpeg、bmp等图片。示例html文件
<html>
<body><img src="image.jpg"></body>
</html>
>>浏览doc文档、pdf文件:利用控件的Navigate接口,可以浏览word文档和pdf文件,只要第一参数填上文件的全路径名,后面的参数都可以为NULL
第二:打印
通过控件的ExecWB接口可以将控件中显示的内容打印出来,并且能够很简单地实现打印预览,和纸张大小设置。
//m_WebBrowse为控件对应的变量
m_WebBrowse.ExecWB(OLECMDID_PRINT,OLECMDEXECOPT_PROMPTUSER,NULL,NULL); //打印
//使用OLECMDEXECOPT_PROMPTUSER参数则打印之前会弹出对话框,让用户选择打印机、页面布局等设置,使
//用OLECMDEXECOPT_DONTPROMPTUSER则不会弹出
m_ WebBrowse.ExecWB(OLECMDID_PRINTPREVIEW,OLECMDEXECOPT_DONTPROMPTUSER,NULL,NULL); //打印预览
m_ WebBrowse.ExecWB(OLECMDID_PAGESETUP,OLECMDEXECOPT_PROMPTUSER,NULL,NULL); //纸张尺寸设置
第三:截获提交的数据,进一步还可以使用DHTML显示提交的数据
实现这些功能主要通过修改控件对消息BeforeNavigate2的处理,原型如下:
OnBeforeNavigate2Explorer1( //该函数在HTML的连接前调用
LPDISPATCH pDisp,
VARIANT FAR* URL, //准备浏览的URL,修改它可以实现转向
VARIANT FAR* Flags,
VARIANT FAR* TargetFrameName,
VARIANT FAR* PostData,
VARIANT FAR* Headers,
BOOL FAR* Cancel)//TRUE:停止 FALSE:继续
IWebBrowser2* CDoHtml::GetWebBrowser(CString &strError,HWND hIEWindow)
{
HWND hTempWnd = (NULL != hIEWindow)?hIEWindow:GetIEHandle();
//显示装载OLEACC.DLL才知道有没有安装MSAA
HINSTANCE hInst = LoadLibrary( _T("OLEACC.DLL") );
if( NULL == hInst )
{//如果没有安装MSAA
MessageBox(NULL,_T("Please Install Microsoft Active Accessibility"),"Error",MB_OK);
return NULL;
}
IWebBrowser2* pWebBrowser2=NULL;
UINT nMsg = ::RegisterWindowMessage("WM_HTML_GETOBJECT");
DWORD dwRes = 0;
::SendMessageTimeout(hTempWnd, nMsg, 0L, 0L, SMTO_ABORTIFHUNG, 1000, &dwRes);
LPFNOBJECTFROMLRESULT pfObjectFromLresult = (LPFNOBJECTFROMLRESULT)::GetProcAddress( hInst, _T("ObjectFromLresult") );
if ( pfObjectFromLresult != NULL )
{
HRESULT hr;
CComPtr<IHTMLDocument2>spDoc;
hr=pfObjectFromLresult(dwRes,IID_IHTMLDocument2,0,(void**)&spDoc);
if ( SUCCEEDED(hr) )
{
CComPtr<IHTMLWindow2>spWnd2;
CComPtr<IServiceProvider>spServiceProv;
hr=spDoc->get_parentWindow ((IHTMLWindow2**)&spWnd2);
if(SUCCEEDED(hr))
{
hr=spWnd2->QueryInterface (IID_IServiceProvider,(void**)&spServiceProv);
if(SUCCEEDED(hr))
{
hr = spServiceProv->QueryService(SID_SWebBrowserApp,IID_IWebBrowser2,(void**)&pWebBrowser2);
}
}
}
}
::FreeLibrary(hInst);
return pWebBrowser2;
}
/* CComPtr<IOleObject> spOleObj;
CComPtr<IWebBrowser2> m_spWebBrowser;
// Create WebBrowser--store pointer in class member variable m_spWebBrowser
CoCreateInstance(CLSID_WebBrowser, NULL, CLSCTX_INPROC, IID_IWebBrowser2, (void**) &m_spWebBrowser);
// Query WebBrowser for IOleObject pointer
//CComQIPtr<IWebBrowser2,&IID_IWebBrowser2> pWebBrowser(m_spOleObjectPreloadBrowser);
m_spWebBrowser->QueryInterface(IID_IOleObject, (void**)&spOleObj);
// Set client site
spOleObj->SetClientSite(this);
// In-place activate the WebBrowser control
RECT rcClient;
GetClientRect(&rcClient);
spOleObj->DoVerb(OLEIVERB_INPLACEACTIVATE, NULL, this, 0, GetTopLevelWindow(), &rcClient);
// Register container to intercept WebBrowser events
AtlAdvise(m_spWebBrowser, GetUnknown(), DIID_DWebBrowserEvents2, &m_dwCookie);
// Navigate to start page
m_spWebBrowser->Navigate(L"res://webhost.exe/startpage.htm", NULL, NULL, NULL, NULL); */
http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html
http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html
http://blog.csdn.net/vcmfc/archive/2000/12/14/3577.aspx
http://www.cnblogs.com/henryzc/archive/2005/11/11/273783.html
http://hi.baidu.com/iswq/blog/item/61f2bffd99956a1308244d46.html
http://blog.csdn.net/skyremember/archive/2008/12/02/3432544.aspx
http://hi.baidu.com/tuzi___520/blog/item/8d187302bd8780064afb517f.html
http://hi.baidu.com/chenrubo012/blog/item/d1c5910b7e0ef91a94ca6b5c.html
http://www.vckbase.com/document/viewdoc/?id=883
http://msdn.microsoft.com/zh-cn/library/aa741857(en-us,VS.85).aspx
http://www.cnblogs.com/henryzc/archive/2005/11/11/273951.html
http://blog.163.com/ygdljg/blog/static/546010462008101191835269/
http://zhidao.baidu.com/question/88526186.html
http://msdn.microsoft.com/en-us/library/aa752127(VS.85).aspx
http://hi.baidu.com/ben2000/blog/item/2902e7ce5a1ecb0493457e8d.html
- WebBrowser2的应用
- WebBrowser2封装的容器
- WebBrowser2封装的容器收藏
- MFC WEBBROWSER2控件的一个BUG
- VC++ Webbrowser2控件的缩放功能
- IE7中获取当前激活的WebBrowser2对象指针
- 屏蔽WebBrowser2控件声音
- WebBrowser2控件去除滚动条
- 关于WebBrowser2控件API函数说明
- CHtmlView / WebBrowser2 如何真正知道DocumentComplete
- CHtmlView WebBrowser2 如何真正知道DocumentComplete
- ActiveX中访问script(IE中,非WebBrowser2)
- MFC工程中如何导出WebBrowser2浏览器类
- 处理webbrowser2控件浏览网页时发生的当前页脚本错误
- pivot 的应用,有图有应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- Servlet应用---HttpServletRequest的应用
- 打开网页自动弹出一个页面的代码分析
- SQL中的left outer join,inner join,right outer join用法
- 测试杀毒软件好坏
- 自制的 .net framework 强命名工具(支持.net4)
- FlashBack Query
- WebBrowser2的应用
- Swing实现选项卡功能(JTabbedPane)
- mini2440 u-boot-2009.03 移植最详细攻略
- 百度空间的访问统计怎么做
- A CSS styled table
- 一个问题的长征
- Windows Management Instrumentation(WMI) 之 Win32 类
- JavaBean中打印信息到JSP页面
- 指针概述