testWebBrowserDlg.h
// testWebBrowserDlg.h : 头文件
//
#pragma once
#include "explorer1.h"
#import "C:\windows\system32\mshtml.tlb" // location of mshtml.tlb
#include <map>
#include <comdef.h>
#include <mshtml.h>
#include <mshtmdid.h>
/*
标题:测试C++代码与WebBrowser HTML的互动
Author:Kagula
Date:2014-08-20
版本号:3
Test Env: Windows8.1、VS2013 Update2
内容:
[1]如何拿到html中的elements,取得它的属性!
[2]如何响应element激发的事件
[3]如何修改指定element的属性
[4]如何Render内存中的html字符串
参考资料
[1]《MFC中针对WebBrowser控件增加link链接点击事件监控》
http://www.mworkbox.com/wp/work/509.html
[2]《IWebBrowser2 interface》
http://msdn.microsoft.com/en-us/library/aa752127(VS.85).aspx
[3]《Handling HTML Element Events》
http://msdn.microsoft.com/en-us/library/bb508508(v=vs.85).aspx
[4]《如何从 VC web 浏览器应用程序中调用脚本函数》
http://support.microsoft.com/kb/q185127
[5]《Loading HTML content from a Stream》
http://msdn.microsoft.com/en-us/library/ie/aa752047%28v=vs.85%29.aspx
[6]《How do I get the font color from a piece of HTML source code?》
http://stackoverflow.com/questions/7402347/how-do-i-get-the-font-color-from-a-piece-of-html-source-code
[7]《How to create a sink interface in a MFC-based COM client》
http://support.microsoft.com/default.aspx?scid=kb;en-us;181845
[8]《How To Use the Microsoft WebBrowser Control to Render HTML from Memory》
http://www.nuonsoft.com/blog/2010/03/24/how-to-use-the-microsoft-webbrowser-control-to-render-html-from-memory/comment-page-1/
[9]《How do I get the font color from a piece of HTML source code?》
http://stackoverflow.com/questions/7402347/how-do-i-get-the-font-color-from-a-piece-of-html-source-code
[10]《Using the WebBrowser control, simplified》
http://www.codeproject.com/Articles/3919/Using-the-WebBrowser-control-simplified
[11]《Microsoft Internet Explorer 5.5 behaviors》
http://msdn.microsoft.com/en-us/magazine/cc301528.aspx
[12]《Using IHTMLEditDesigner》
http://www.codeproject.com/Articles/6546/Using-IHTMLEditDesigner
[13]《MFC C++ WebBrowser Control load HTML from a string》
http://stackoverflow.com/questions/9179179/mfc-c-webbrowser-control-load-html-from-a-string
[14]VC++ webbrowser函数使用范例
[15]《【webbrowser使用】_webbrowser使用的相关文章,教程,源码》
http://www.xuebuyuan.com/zt/12577882.html
*/
namespace kagula
{
struct ConnectionInfo
{
IDispatch* dispatch;
IID iid;
DWORD cookie;
ConnectionInfo() {}
ConnectionInfo(IDispatch *dispatch, IID iid, DWORD cookie)
{
this->dispatch = dispatch, this->iid = iid, this->cookie = cookie;
}
};
}
// CtestWebBrowserDlg 对话框
class CtestWebBrowserDlg : public CDialogEx
{
// 构造
public:
CtestWebBrowserDlg(CWnd* pParent = NULL); // 标准构造函数
// 对话框数据
enum { IDD = IDD_TESTWEBBROWSER_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
CExplorer1 m_webBrowser;
void SetElementAttribute(MSHTML::IHTMLDocument2Ptr htmlDoc,CString elementID,CString attributeName,CString value);
std::map<IDispatch*, kagula::ConnectionInfo> m_mapElem2EventCookie;//用于释放Connection
void ReleaseHTMLConnection();
void DemoGetElement(LPDISPATCH pDisp, VARIANT* URL);
void DemoGetAllLinkElement(LPDISPATCH pDisp, VARIANT* URL);
void OnClick(MSHTML::IHTMLEventObj *pEvtObj);
void OnLostFocus(MSHTML::IHTMLEventObj *pEvtObj);
void WriteHTML(const wchar_t* html);
afx_msg void OnBn