解决方案 »

  1.   

    Invalidate/InvalidateRect强制刷新整个窗口也不行吗?
      

  2.   

    我这人习惯不好,一般写完的东西就扔,不保证能找到原来写的代码,但是原理可以告诉你:我写的应用跟你少有不同,是一个MDI程序,打开View,嵌入了Word,View刷新Word不刷新,解决原理:
    获得Word主窗体句柄,然后枚举这个主窗体的子窗体,调用子窗体刷新,这样Word就会随着View的刷新而刷新所有。
    效率什么都没问题,很正常的。具体如果我能找到原来的代码,我直接发给你,也可能找不到了。
      

  3.   

    msword  是一组 组件接口,应该可以直接创建然后通过接口刷新吧,没用过只是个人一点意见
      

  4.   

    尝试用Invalid强制刷新word的编辑窗口(就是可以编辑的那个窗口,咱就叫他编辑窗口吧),其他窗口(比如菜单栏,工具栏,状态栏等已被我隐藏),只有个别时候有效,大多数时候无效
      

  5.   

    原来尝试过invalid 来强制刷新 word 的编辑窗口,只是个别时候有效——也许是因为没有刷新其他窗口吧
    我去尝试下,谢r3000兄指点。
      

  6.   

    感谢lis2012兄回复找不到通过com接口刷新word的方法,也无法通过com接口获取word的各窗口的句柄
      

  7.   

    尝试用Invalid强制刷新word的编辑窗口(就是可以编辑的那个窗口,咱就叫他编辑窗口吧),其他窗口(比如菜单栏,工具栏,状态栏等已被我隐藏),只有个别时候有效,大多数时候无效获得Word进程的主窗体(就是你嵌入的那个窗体),然后枚举GetChild,一层层GetChild,获得所有子窗体,给每个子窗体发重绘消息。这样就会都更新了。我记得当时我就是写了这么一个小函数,几行代码而已。
      

  8.   

    感谢lis2012兄回复找不到通过com接口刷新word的方法,也无法通过com接口获取word的各窗口的句柄
    根本没有这个接口,Word和Excel开放的接口很有限的,微软不会把自己的旗舰开放的很多。
      

  9.   

    感谢楼上所有热心帮忙的兄弟,问题我已经找到了,因为其他窗口大都被我隐藏或者关闭了,所以原先只刷新word编辑窗口的办法其实也没错。
    之所以有时候成功有时候“失败”,其实是因为我忘记隐藏用来限制word窗口大小的那个静态文本框特别感谢r3000兄!
    r3000兄说的逐个刷新所有窗口是最”万能“的解决方案,谢谢,真的很感激!另外 不知道 r3000兄原来写的有关word的应用是哪方面的(都有哪些功能)
    我现在还想借这个帖子请教(我只有28分了,太少了,要不就另开贴请教了)一个问题
    如何把当前打开的word文档中的一部分(非纯文本,可能包含图片、表格等)读取到内存中
    范围这个不用考虑,selection,range都无所谓;
    我现在的解决办法比较笨,先选定要读取的部分,粘贴到另外一个空的word文档A中,然后保存文档A
    再把文档A读入内存——太笨了,效率也非常低!
    有没有效率稍高点的方法?不能以图片的形式来读取,因为将来还要还原读取的这部分
      

  10.   

    http://blog.csdn.net/hhhh63/article/details/7652696 先建一个word模板,然后根据主程序的内容初始化。
      

  11.   

    可以尝试用RedrawWindow()再配合适当的参数 。 具体的请参考MSDN
      

  12.   

    回复14楼,几年前,我负责过一个OFFICE的项目,就是在外部控制Word,Excel做事情,可惜这个项目最后没有应用,
    因为只是公司产品中的一个附加功能,后来就转到别的项目上了,没在关注这块,首先说OFFICE通过COM开放的接口
    和功能是有限的,我想这是由于商业考虑,而且OFFICE的COM中还有一些BUG,有些BUG估计只有掌握OFFICE源码
    才能解决了。当时我做时也是克服了重重困难。其实操作OFFICE还是从文件的解析和代码的逆向来考虑,似乎有些开源的
    类OFFICE产品有很多是能兼容MSOFFICE的,还有WPS据说是逆向分析了OFFICE文件。你可以找这些开源代码来研究。
    通过COM或者其他微软开放的接口来访问会受到很多限制。