表单处理


我对照着教程添加了ActiveX控件Microsoft Web浏览器,添加了对应变量m_ctrlWeb。并加上<mshtml.h>,<comdef.h>和<atlbase.h>头文件。

添加了相应代码后,最后运行时出现
TableFillDlg.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall CTableFillDlg::HasItem(struct IHTMLElementCollection *,class ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class ATL::ChTraitsCRT<wchar_t> > >)" (?HasItem@CTableFillDlg@@QAE_NPAUIHTMLElementCollection@@V?$CStringT@_WV? $StrTraitMFC_DLL@_WV?$ChTraitsCRT@_W@ATL@@@@@ATL@@@Z),该符号在函数 "public: void __thiscall CTableFillDlg::OnDownloadCompleteExplorer(void)" (?OnDownloadCompleteExplorer@CTableFillDlg@@QAEXXZ) 中被引用

这是怎么回事?环境是VS.net2005

代码:
BOOL CTableFillDlg::OnInitDialog()
{
......
COleVariant vaUrl=_T("http://web.newsfan.net/register.php");
m_ctrlWeb.Navigate2(&vaUrl, &vtMissing, &vtMissing, &vtMissing, &vtMissing);
......
}

void CTableFillDlg::OnDownloadCompleteExplorer(void)
{
// TODO: 在此处添加消息处理程序代码
// TODO: Add your control notification handler code here
IHTMLElementCollection *objAllElement=NULL;
IHTMLDocument2 *objDocument=NULL;
CString strUrl,strTemp;
strUrl=m_ctrlWeb.get_LocationURL();//得到当前网页的URL
if(strUrl.IsEmpty())
return;
objDocument=(IHTMLDocument2 *)m_ctrlWeb.get_Document(); //由控件得到IHTMLDocument2接口指针
objDocument->get_all(&objAllElement); //得到网页所有元素的集合
//由于所有页面下载完后都会执行这个函数,所以必须根据URL判断消息来源网页
if(strUrl=="http://web.newsfan.net/register.php")
{
CComPtr<IDispatch>pDisp;
if(HasItem(objAllElement,_T("voteform"))==true) //voteform为投票选项所在的Form
{
objAllElement->item(COleVariant(_T("voteform")),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLFormElement , &IID_IHTMLFormElement >pElement;
if(pDisp==NULL)
{
//接口指针获取失败,结束程序,不另外作处理,原因见后
EndDialog(IDOK);
return;
}
else
{
//如果投票结果在新窗口打开,则应该修改网页代码,让结果在本控件中显示
pElement=pDisp;
pElement->put_target(CComBSTR("_self")); //等效于target="_self"
pElement->put_action(CComBSTR("vote2.asp"));//等效于action="vote2.asp"
}
CheckItem(objAllElement,_T("chk2")); //将form中id为chk2的CheckBox选中
SubmitPage(objAllElement,_T("vote")); //提交网页,vote为submit按钮的id或name
}
}
else if(strUrl=="http://www.onlytest.com/vote2.asp")
{
EndDialog(IDOK); //如果投票处理页面已经下载完毕,则结束程序,原因见后。
}

}
//功能:判断网页里是不是有strName指定的元素
//参数: pobjAllElement:网页中所有元素的集合
// strName:网页中元素的id或name
bool HasItem(IHTMLElementCollection *pobjAllElement,CString strName)
{
CComPtr<IDispatch>pDisp;
pobjAllElement->item(COleVariant(strName),COleVariant((long)0),&pDisp);
if(pDisp==NULL)
return false;
else
return true;
}

//功能:选中网页中的一个CheckBox (其实就是点击)
//参数: pobjAllElement:网页中所有元素的集合
// strName:要选中的CheckBox的id或name
void CheckItem(IHTMLElementCollection *pobjAllElement,CString strName)
{
CComPtr<IDispatch>pDisp;
pobjAllElement->item(COleVariant(strName),COleVariant((long)0),&pDisp);
CComQIPtr<IHTMLElement, &IID_IHTMLElement>pElement;
if(pDisp==NULL)
{
AfxMessageBox(strName + "没有找到!");
}
else
{
pElement=pDisp;
pElement->click();
}
}

//功能:提交一个网页的Form
//参数: pobjAllElement:网页中所有元素的集合
// strName:可以提交Form的按钮的id或name(也可以直接Form的submit提交)
void SubmitPage(IHTMLElementCollection *pobjAllElement,CString strName)
{
CComPtr<IDispatch>pDisp;
pobjAllElement->item(COleVariant(strName),COleVariant((long)0),&pDisp);
CComQIPtr<IDispatch>pElement;
if(pDisp==NULL)
{
AfxMessageBox(strName + "没有找到!");
}
else
{
pElement=pDisp;
//pElement->click();


}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值