CDHtmlDialog::Navigate() 加载后 m_spHtmlDoc是否变化?原有的DHTML_EVENT_CLASS等事件映射是否仍然有效?

keristef 2009-05-15 04:38:53
以CDHtmlDialog为载体html为皮肤界面,当换皮肤时用Navigate新加载一个元素的id、class等属性完全一样,
仅界面文字不同的html文件,完全原来在BEGIN_DHTML_EVENT_MAP所作的事件映射是否仍然有效?新的界面表面看
起来貌似加载成功,但实际在做文字替换SetElementHtml时内部代码:

void CDHtmlDialog::SetElementHtml(LPCTSTR szElementId, BSTR bstrText)
{
CComPtr<IHTMLElement> sphtmlElem;
GetElement(szElementId, &sphtmlElem);
if (sphtmlElem)//此处是空 sphtmlElem->put_innerHTML(bstrText);
}

Navigate执行前会把m_spHtmlDoc 清除掉,执行后m_pBrowserApp这个代理到底发生了什么变化?
void CDHtmlDialog::OnBeforeNavigate(LPDISPATCH pDisp, LPCTSTR szUrl)
{
szUrl; // unused

if (pDisp != m_pBrowserApp)
return;
DisconnectDHtmlEvents();
m_spHtmlDoc = NULL;
m_strCurrentUrl.Empty();
}

总结: Navigate函数执行后加载新的html文件,在所有的元素id\class等属性值未变化的前提下原有的利用这些id、class
所作的事件映射是否仍然有效?
另一个问题:用CDHtmlDialog和html结合来做客户端是否合适?真正处理起数据及界面状态变化时根本没觉得比mfc方便撒。。。

谢谢!
...全文
517 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
keristef 2009-05-17
  • 打赏
  • 举报
回复
谢谢各位!
yjgx007 2009-05-17
  • 打赏
  • 举报
回复
透过现象看本质,还是事件连接点的设置。
keristef 2009-05-17
  • 打赏
  • 举报
回复
谢谢指点!
拖拽文件指的是html在CDHtmlDialog对话框中显示时可能其尺寸是超过对话框本身尺寸的,如果你用鼠标左键随便点哪儿往对话框边界拖时,里面的html会往反方向移动,就貌似下拉条的效果,这个效果对我正在做的客户端来说是绝对多余的,我想让html在CDHtmlDialog对话框中显示时是固定的,而不是可移动,请指教。

蒋晟 2009-05-17
  • 打赏
  • 举报
回复
在DocumentComplete的时候MFC应该会根据HTML事件映射重新挂
没明白你所谓的拖文件是什么意思,拖放会开始一个选择范围,或者拖放当前选择的HTML元素集合。
蒋晟 2009-05-16
  • 打赏
  • 举报
回复
事件映射要重新挂
oyljerry 2009-05-16
  • 打赏
  • 举报
回复
比较安全的做法还是Navigate到不同的页面后,再响应对应的EVENT等事件...
keristef 2009-05-16
  • 打赏
  • 举报
回复
我这里的结果是只要元素的id和class没有变化,事件映射仍然有效,如
<a href='#' id='button_search' class='button' value='XXX'/>

在原来页面A中存在,Navigate(B.html)后在B中仍然存在这个元素,原来针对此
元素的事件映射仍然是有效的。我的理解是不管你加载哪个页面,加载过程中不能对
页面内元素进行操作,只要加载完才不管你是哪个页面,有事件映射就响应。另外如果用
CMultiPageDHtmlDialog来实现同一页面的多语言效果,切换语言界面就是不停的Navigate么?
lynx090 2009-05-16
  • 打赏
  • 举报
回复
会的,不要就不会要求你等HTML文件加载完毕才去获得DOC指针了。

楼主可以去把PANDION下载来研究一下,这个就是用HTML做的客户端。
keristef 2009-05-16
  • 打赏
  • 举报
回复
重新挂什么意思?我只知道用BEGIN_DHTML_EVENT_MAP这些宏进行映射,还有可以动态挂的么?
烦请解释。。谢谢!
另:CDHtmlDialog对话框中加载的html文件在用鼠标点住不放往对话框边界拖时html页面会移动
导致显示效果不是原来的界面范围了,这该用html自身的特性来设置还是通过什么api来实现html在
对话框中固定?
jameshooo 2009-05-15
  • 打赏
  • 举报
回复
只有GetControlUnknown获取的根浏览器接口不变,其它所有接口都会变化。
事件响应只针对一个页面有效,导航到新页面后事件全部失效。多页面应该使用CMultiPageDHtmlDialog设置事件映射。

3,056

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC HTML/XML
社区管理员
  • HTML/XML社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧