A Tour through TSF: Contexts and Ranges


Our next stop on our tour through TSF brings us to the two most heavily used interfaces in text services:  Contexts and Ranges.  But first, a quick diversion to discuss the relationship between threads, documents, and contexts.


The ITfThreadMgr object is the primary object implemented by TSF.  TSF ensures that no more than one ITfThreadMgr object exists in each thread.   The ITfThreadMgr object manages documents, text services, and handles focus changes between documents.


The ITfDocumentMgr object represents a logical document.  It isn’t heavily used, though; its primary purpose is to be a container for edit contexts.  There is usually only one context in the document manager, although sometimes there can be two.


The ITfContext object represents a view of the document that you can interact with; it manages selections, properties, & ranges.


Contexts


A context represents a view of the document that a text service can interact with.






































Interface


How to Obtain


ITfContext


Varies widely.  Common examples:


ITfDocumentMgr::GetTop()


ITfDocumentMgr::CreateContext()


ITfContextView


ITfContext::GetActiveView


ITfContextComposition


QI on ITfContext


ITfContextOwnerCompositionServices


QI on ITfContext


ITfContextOwnerServices


QI on ITfContext


ITfInsertAtSelection


QI on ITfContext


ITfMouseTracker


QI on ITfContext


ITfQueryEmbedded


QI on ITfContext


ITfComposition


ITfContextComposition::StartComposition


ITfCompositionView


Passed to any of:


ITfContextOwnerCompositionSink::OnStartComposition


ITfContextOwnerCompositionSink::OnUpdateComposition


ITfContextOwnerCompositionSink::OnEndComposition


Once you have a context (and usually an edit cookie – most of the things you can do with contexts can only be done from within edit sessions), you can start to manipulate the document. 


Ranges


These interfaces deal with pieces of text within a logical document.

















Interface


How to Obtain


ITfRange


Varies widely;  common instances are:


ITfContext::GetSelection


ITfRangeACP


QI on ITfRange


ITfRangeBackup


ITfContext::CreateRangeBackup

Comments (0)