我所在项目中用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:当消息中不包含图片时,滚动条能按预期滚到最下面。多谢老大!万分感谢!

解决方案 »

  1.   

    我也遇到过相同的问题。后来就放弃了,直接用HTMLVIEW,后面再加LABEL啥的。SCOLL的部分好像不正常。
      

  2.   

    试下用IHTMLBodyElement::get_scrollHeight?
    设置事件put_scroll响应滚动事件, 得到滚动条高度.
      

  3.   


    谢谢
    “设置事件put_scroll”,是指哪个事件?多谢
      

  4.   

    IHtmlWindow2::ScrollTo([x-value], [y-value];
    just set the x,y values to some high value and it will go to the end of the current HTML content displayed.
      

  5.   

    从IDispatch派生一个事件处理类CMySink : public IDispatch, 执行Invoke方法.
    CMySink mysink;
    IHTMLBodyElement::put_scroll(&mysink);
    当滚动事件到达后,CMySink::Invoke将被调用, 再次, 执行IHTMLBodyElement::get_scrollHeight实际上,IHTMLDocument2::get_scrollHeight有时会有些异常, 返回值不正确,
    这依赖于明确的<!Doctype>标记定义.
      

  6.   

    直接用 IHTMLWindow2 的 scrollTo(0,99999999);