我所在项目中用CHtmlEditView实现了一个聊天框,每次来消息后,调用insertAdjacentHTML
插入html代码,同时滚动条滚动到最下面。当接收到的对方消息中包含图片时,先会插入一个本地的图片(“加载中”),
图片下载完毕时找到相应的IHTMLElement,调用setAttribute把图片刷新到界面上,然后尝试把滚动条滚到最下面。
但setAttribute后用IHTMLElement2的接口get_scrollHeight获取的高度是调用setAttribute之前的高度,
有没有异步获取到新的正确的scrollHeight方法吗?另外的问题是:当我用测试代码主动调用get_scrollHeight时,
获取的高度却是一个较小的固定值(所以想用timer或者postmessage来异步调整滚动条也失败了),为什么呢?(http://www.codeproject.com/KB/miscctrl/scrollbrowser.aspx中对此有过描述,
// try to get the whole page size - but the returned number
// is not allways correct. especially with pages that use dynamic html
// tricks...
)ps:当消息中不包含图片时,滚动条能按预期滚到最下面。多谢老大!万分感谢!
插入html代码,同时滚动条滚动到最下面。当接收到的对方消息中包含图片时,先会插入一个本地的图片(“加载中”),
图片下载完毕时找到相应的IHTMLElement,调用setAttribute把图片刷新到界面上,然后尝试把滚动条滚到最下面。
但setAttribute后用IHTMLElement2的接口get_scrollHeight获取的高度是调用setAttribute之前的高度,
有没有异步获取到新的正确的scrollHeight方法吗?另外的问题是:当我用测试代码主动调用get_scrollHeight时,
获取的高度却是一个较小的固定值(所以想用timer或者postmessage来异步调整滚动条也失败了),为什么呢?(http://www.codeproject.com/KB/miscctrl/scrollbrowser.aspx中对此有过描述,
// try to get the whole page size - but the returned number
// is not allways correct. especially with pages that use dynamic html
// tricks...
)ps:当消息中不包含图片时,滚动条能按预期滚到最下面。多谢老大!万分感谢!
设置事件put_scroll响应滚动事件, 得到滚动条高度.
谢谢
“设置事件put_scroll”,是指哪个事件?多谢
just set the x,y values to some high value and it will go to the end of the current HTML content displayed.
CMySink mysink;
IHTMLBodyElement::put_scroll(&mysink);
当滚动事件到达后,CMySink::Invoke将被调用, 再次, 执行IHTMLBodyElement::get_scrollHeight实际上,IHTMLDocument2::get_scrollHeight有时会有些异常, 返回值不正确,
这依赖于明确的<!Doctype>标记定义.