word ole 抢焦点问题替代方案

问题背景:

做了CS项目来完成word的实时同步,如某个客户端(A)输入一个字(句子),另一个客户端(B)显示了这个字(句子)。

word操作过程中使用的Range对象的InsertAfter来完成插入,最后通过Range的Select函数来完成定位到光标处,这样客户B就能实时的看到客户端A输入的内容。

但现在的问题是Select会抢光标焦点。如客户端(B)自己打开了任意doc文件在编辑,在编辑的过程中焦点老是被客户端B中的word抢去。


实验根据现象,发现可能的方案:

一 :不同winword.exe进程中的word相互不抢焦点。

发现通常情况下,任务管理器中只有一个winword.exe。如果让客户端B中的word使用单独的一个winword.exe即不会抢焦点。此方法存在一个问题,用户通过双击doc文件打开word时,会依附于任务管理器中的任一个winword.exe。那么就会出现客户端B中使用的word对应的winword.exe与双击doc文件打开的word对应一个winword.exe相同。此问题暂时不知怎么解决。


二: word对象模型中的Pane对象的PageScroll不会抢焦点。

那么就可以使用PageScroll来实现将当前窗口挪动到Range位置来实现定位的功能。

思路大概是:

    1)获得Range所在的页,以及所在页中的百分比位置。

    2)将窗口挪到Range所在的页

    3)根据Range在上半页还是下半页,来使窗口不动还是微调半页。

具体:

     1)获得Range所在的页,以及所在页中的百分比位置。

Range的GetInformation(wdActiveEndPageNumber)方法来获得range所在页。

Range的GetInformation(wdVerticalPositionRelativeToPage)方法及GetPageSetup()->GetPageHeight()方法来得到百分比。

     2)将窗口挪到Range所在的页。

调用View的PutDisplayPageBoundaries(TRUE)

调用Window的PageScroll将窗口先挪到首页。(此函数执行时用try catch包住,因为在没有上页时执行此操作会抛异常)

再Window的PageScroll将窗口挪动到Range所在页。

     3)

调用Window的SmallScroll来微调。正常页面情况下40,50下为半页。

在100页范围内可使用GetVerticalPercentScrolled来做一些逻辑,能基本准确定位。

三:

直接调用Window的ScrollIntoView方法。此方法的参数为Range对象。


最终采用方案三



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值