首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

CHtmlView加载Html字符串,模拟点击 IHTMLElement click 错误的有关问题2

2012-12-25 
CHtmlView加载Html字符串,模拟点击 IHTMLElement click 异常的问题2之前发错板块了。。问题地址是http://top

CHtmlView加载Html字符串,模拟点击 IHTMLElement click 异常的问题2
之前发错板块了。。
问题地址是

http://topic.csdn.net/u/20110602/16/d079b06c-8d65-4598-bb4b-88648075d995.html?seed=891617702&r=73667674#r_73667674

[最优解释]
pElem->click();//异常
----------
你是在什么地方调用的这个函数?

需要在界面线程中,CHtmlView 重载 OnDocumentComplete 中调用。
[其他解释]

http://topic.csdn.net/u/20110602/16/d079b06c-8d65-4598-bb4b-88648075d995.html?seed=891617702&r=73667674#r_73667674

[其他解释]
公共全局对象
CXHtmlView g_htmlView;

我在一个自定义工作线程中调用,那个线程是用wininet抓去页面的
抓到页面放入CString strHtml;

g_htmlView.Load(strHtml);
g_htmlView.ClickButton(_T("se"));//根据name="se",点击radio按钮

CXHtmlView继承CHtmlView


class CXHtmlView : public CHtmlView
{
public:
CXHtmlView(void);
~CXHtmlView(void);
public:
void Init();
afx_msg void OnDestroy();
virtual void OnDocumentComplete(LPCTSTR lpszURL);
DECLARE_MESSAGE_MAP()
protected:
virtual void PostNcDestroy();
public:
void OnInitialUpdate();
HANDLE m_docComplete; //页面加载完毕事件
public:
CStdioFile m_viewFile;
CString m_viewPath;
void SaveHtmlString(CString strHtml);
public:
void Load(CString strHtml);
void ClickButton(CString elementId);

};



#include "StdAfx.h"
#include "XHtmlView.h"
#include "Public.h"

CXHtmlView::CXHtmlView(void)
{
m_docComplete = ::CreateEvent(0,FALSE,FALSE,0);
}

CXHtmlView::~CXHtmlView(void)
{
CloseHandle(m_docComplete);
this->DestroyWindow();
}

void CXHtmlView::Init()
{
CWnd* pParent = AfxGetApp()->GetMainWnd();
Create(NULL,                    // 类名
NULL,                    // 标题
(WS_CHILD 
[其他解释]
 WS_VISIBLE ), // 风格
CRect(0,0,0,0), // 矩形区域
pParent,          // /父窗口
NULL,  // 控制 ID
NULL);          ///框架/文档
OnInitialUpdate();
}

BEGIN_MESSAGE_MAP(CXHtmlView, CHtmlView)
ON_WM_DESTROY()
END_MESSAGE_MAP()

void CXHtmlView::OnDestroy()
{
CHtmlView::OnDestroy();

// TODO: 在此处添加消息处理程序代码
}
//通常,CHtmlView是在virtual   void   PostNcDestroy()中释放空间,但对话框或者控件中的控制常常是作为堆栈对象实现的,所以,在PostNcDestroy()中不必在做什么。 
void CXHtmlView::PostNcDestroy()
{
// TODO: 在此添加专用代码和/或调用基类

//CHtmlView::PostNcDestroy();
}
//页面加载完毕
void CXHtmlView::OnDocumentComplete(LPCTSTR lpszURL)
{
// TODO: 在此添加专用代码和/或调用基类

SetEvent(m_docComplete);

//CHtmlView::OnDocumentComplete(lpszURL);
}

void CXHtmlView::OnInitialUpdate()
{
this->Navigate2(_T("about:blank"));
}

void CXHtmlView::Load(CString strHtml)
{


SaveHtmlString(strHtml);
ResetEvent(m_docComplete);
this->Navigate2(m_viewPath);

::WaitForSingleObject(m_docComplete,30 * 1000);
}

void CXHtmlView::SaveHtmlString(CString strHtml)
{
m_viewPath = g_theAppPath + _T("tempHtml.html");
if(FALSE == m_viewFile.Open(m_viewPath,CFile::modeWrite))
{
if(FALSE == m_viewFile.Open(m_viewPath,CFile::modeCreate
[其他解释]
CFile::modeWrite))
{
MessageBox(_T("程序初始化失败!"), _T("错误"), MB_OK

热点排行