关于MFC中CDHtmlDialog嵌入flash和调用JS一些技术总结
2013-03-22 13:44
1116 查看
1.关于嵌入网页URL;
Navigate(url);
2. 拦截网页中URL地址
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 250, _OnBeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
方法:
:_OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
}
3. MFC调用网页中的 JavaScript
一开始
和
原因 仔细查看了 框架的源代码 发现
请仔细查看 : dlgdhtml.cpp 源文件!!
GetDoucuemt 中需要 把 m_spHtmlDoc 变量赋值; 这个赋值过程在
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 259 /* DocumentComplete */, _OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 252 /* NavigateComplete2 */, _OnNavigateComplete2, VTS_DISPATCH VTS_PVARIANT)
过多的理论 还不入去多看看源代码去分析分析。 或许你会发现很多!!!
Navigate(url);
2. 拦截网页中URL地址
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 250, _OnBeforeNavigate2, VTS_DISPATCH VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PBOOL)
方法:
:_OnBeforeNavigate2(LPDISPATCH pDisp, VARIANT FAR* URL, VARIANT FAR* Flags, VARIANT FAR* TargetFrameName, VARIANT FAR* PostData, VARIANT FAR* Headers, BOOL FAR* Cancel)
{
}
3. MFC调用网页中的 JavaScript
IHTMLDocument2* pDocument; HRESULT hr1 =m_Html.GetDHtmlDocument(&pDocument); if(FAILED(hr1)) return; IHTMLWindow2* pWindow; HRESULT hr2 =pDocument->get_parentWindow(&pWindow); if(FAILED(hr2)) return; VARIANT ret; ret.vt = VT_EMPTY; CString strfunc1("refreshFlash()"); HRESULT hr3 = pWindow->execScript(strfunc1.AllocSysString(),L"JavaScript",&ret); if(FAILED(hr3)) return; //清理工作,释放 Document 和 window节点 pDocument->Release(); pWindow->Release();
一开始
GetDHtmlDocument方法总是获得为空对象;后来查看了了 关于 HtmlDiaglog的源代码中; 需要首先调用 _OnNavigateComplete2 这个方法
GetDHtmlDocument方法总是获得为空对象;后来查看了了 关于 HtmlDiaglog的源代码中; 需要首先调用 _OnNavigateComplete2 这个方法
void CHtmlDL::_OnNavigateComplete2(LPDISPATCH pDisp, VARIANT FAR* URL) { CDHtmlDialog::_OnNavigateComplete2(pDisp,URL); }
和
void CHtmlDL::_OnDocumentComplete(LPDISPATCH pDisp, VARIANT FAR* URL) { }
原因 仔细查看了 框架的源代码 发现
请仔细查看 : dlgdhtml.cpp 源文件!!
GetDoucuemt 中需要 把 m_spHtmlDoc 变量赋值; 这个赋值过程在
void CDHtmlDialog::OnNavigateComplete(LPDISPATCH pDisp, LPCTSTR szUrl) //框架中的源文件 !!!!!! { if (pDisp != m_pBrowserApp) return; IDispatch *pdispDoc = NULL; m_pBrowserApp->get_Document(&pdispDoc); if (!pdispDoc) return; ASSERT(m_spHtmlDoc==NULL); pdispDoc->QueryInterface(IID_IHTMLDocument2, (void **) &m_spHtmlDoc); // 注意此处 !!!你会明白什么! if (m_bUseHtmlTitle) { CComBSTR bstrTitle; m_spHtmlDoc->get_title(&bstrTitle); CString str = CString(bstrTitle); SetWindowText(str); } m_strCurrentUrl = szUrl; ConnectDHtmlEvents(pdispDoc); pdispDoc->Release(); }所以我们 还要实现 _OnNavigateComplete2 和 _OnDocumentComplete 事件
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 259 /* DocumentComplete */, _OnDocumentComplete, VTS_DISPATCH VTS_PVARIANT)
ON_EVENT(CHtmlDL, AFX_IDC_BROWSER, 252 /* NavigateComplete2 */, _OnNavigateComplete2, VTS_DISPATCH VTS_PVARIANT)
void CHtmlDL::_OnNavigateComplete2(LPDISPATCH pDisp, VARIANT FAR* URL) { CDHtmlDialog::_OnNavigateComplete2(pDisp,URL); }
void CDHtmlDialog::_OnDocumentComplete(LPDISPATCH pDisp, VARIANT* URL) { ASSERT(V_VT(URL) == VT_BSTR); CString str(V_BSTR(URL)); OnDocumentComplete(pDisp, str); }
过多的理论 还不入去多看看源代码去分析分析。 或许你会发现很多!!!
相关文章推荐
- 对于CDHtmlDialog和JavaScript、HTML配合使用的一些技术总结
- 对于CDHtmlDialog和JavaScript、HTML配合使用的一些技术总结
- CDHtmlDialog的基本使用(C++调用JS函数的实现)
- 关于CDHtmlDialog的控制。MFC Web控件的灵活使用
- 关于html,servlet、css、js一些总结
- CDHtmlDialog的基本使用(C++调用JS函数的实现)
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- CDHtmlDialog的基本使用(JS调用C++函数的实现)
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- 关于MFC项目中使用CDHtmlDialog禁止脚本错误的方法
- 关于CDHtmlDialog的控制。MFC Web控件的灵活使用。
- 关于MFC画图的一些总结,MFC (Draw)
- 在CDHTMLDialog中扩展浏览器脚本以及在HTML中增加MFC消息响应
- CDHtmlDialog 调用javascript
- UTF-8编码问题总结:HTML,PHP,MYSQL,JS,FLASH
- 关于UI开发(总结一些技术和一些论坛牛人讨论)
- 关于Flash制作动画的一些基础总结
- 个人总结一些关于需要学习的技术
- 关于ASPCMS标签调用的一些总结
- Atitit 使用h5技术( html css js)制作桌面程序gui界面解决方案attilax总结