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對象。


最終採用方案三



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章