輸入法開發(fā)——<二>元素
輸入法和應用使用的服務時需要實現(xiàn)幾個元素
我的文章目前提及的都涉及很淺,之后代入編寫都會再講的
通用元素
線程管理器
線程管理器是 TSF 管理器的基本組件。 線程管理器執(zhí)行與應用程序和文本服務相關的常見任務
客戶端標識符
DocumentMgr
應用程序維護的每個文檔有一個單獨的文檔管理器對象。 應用程序使用文檔管理器創(chuàng)建、編輯上下文,添加上下文到上下文堆棧,從上下文堆棧中刪除上下文。
Context
文本服務通常用于編輯狀態(tài)的文字?;顒游谋驹谝粋€活動?DocumentMgr 的棧頂。使用?ITfThreadMgr::GetFocus?可以獲取活動的?DocumentMgr (也就是光標)
使用 ITfDocumentMgr::GetTop 獲取棧頂指針。
EditCoockies 就是下文要提的文本鎖。
Range
兩個值描述一個范圍,用于選定文本。前值必須小于后值。

重力:左后、右前
1、向前


2、向后


克隆與備份:
克隆是不包括靜態(tài)數(shù)據(jù)的范圍的副本。 復制區(qū)域的定位點,但克隆仍涵蓋上下文中的一系列文本。 克隆在所有方面都是范圍對象。 這意味著克隆區(qū)域的文本和屬性是動態(tài)的,如果克隆范圍的文本和/或屬性發(fā)生更改,則會更改。
備份在備份作為靜態(tài)數(shù)據(jù)時存儲范圍的文本和屬性。 備份還會克隆原始區(qū)域,以便可以跟蹤對原始范圍的大小和位置所做的更改。 這意味著備份范圍的文本和屬性是靜態(tài)的,如果備份范圍的文本和/或屬性發(fā)生更改,則不會更改。
下面是微軟的示例

Properties
文本服務框架 (TSF) 提供將元數(shù)據(jù)與一系列文本關聯(lián)的屬性。 這些屬性包括但不限于顯示屬性,例如粗體文本、文本的語言標識符以及文本服務提供的原始數(shù)據(jù)
Compartments
用于特殊情況獲取信息。(跨進程、線程等)
Compositions
合成是一種臨時輸入狀態(tài),它使文本服務能夠同時向應用程序和用戶指定輸入文本仍處于更改狀態(tài)。 應用程序可以并且應該獲取有關合成的顯示屬性信息,并使用此信息向用戶顯示組合狀態(tài)。下一章有。
輸入法
文本服務注冊
注冊文本服務、注冊語言配置文件、注冊類別
語言欄
實現(xiàn)語言欄對象、按鈕樣式、實現(xiàn)菜單按鈕、將項目添加到語言欄、擴展系統(tǒng)語言欄項、支持語言欄菜單擴展
編輯會話
這是必須有的,這里的鎖主要是線程安全和內存安全,與數(shù)據(jù)安全關系不大
提供顯示屬性
應用顯示屬性、提供顯示屬性信息對象
應用程序
文本存儲
應用字符位置(ACP)、Anchor-Based應用程序、文檔訪問控制、如何初始化文本存儲、如何修改文本存儲
ACP?有點像鏈表
文檔鎖定
文檔鎖定協(xié)議、文檔鎖的類型、異步和同步請求、授予鎖、鎖定強制實施
使用顯示屬性
我是對象的所有者沒問題吧?
嵌入對象
可用于插入的對象
語言欄
無 UI 模式
后面講,全屏應用托管輸入法