Barra delle lingue (Servizi di testo)
Per supportare l'aggiunta di un elemento alla barra della lingua, un servizio di testo deve implementare un oggetto che supporta l'interfaccia ITfSource e uno degli elementi di controllo ITfLangBarItem . Quando l'elemento viene installato, la barra della lingua installa un sink ITfLangBarItemSink chiamando il file ITfSource::AdviseSink con IID_ITfLangBarItemSink. L'elemento usa l'interfaccia ITfLangBarItemSink per informare la barra della lingua delle modifiche, ad esempio quando l'elemento è nascosto, visualizzato, abilitato o disabilitato.
È possibile installare quattro tipi di elementi della barra della lingua e ognuna delle interfacce necessarie viene creata da ITfLangBarItem. Di seguito sono riportati i possibili elementi di controllo ITfLangBarItem .
Elemento | Descrizione |
---|---|
Pulsante | Un pulsante della barra della lingua funziona come pulsante di comando, attiva il controllo o un menu sulla barra della lingua. L'oggetto deve supportare l'interfaccia ITfLangBarItemButton. |
Palloncino | Un palloncino della barra del linguaggio funziona come notifica popup sulla barra della lingua. L'oggetto deve supportare l'interfaccia ITfLangBarItemBalloon. |
Bitmap | Una bitmap della barra del linguaggio funge da elemento statico sulla barra del linguaggio che visualizza una bitmap. L'oggetto deve supportare l'interfaccia ITfLangBarBarItemBitmap. |
Pulsante Bitmap | Un pulsante bitmap della barra del linguaggio funziona come elemento pulsante sulla barra della lingua che visualizza il testo e una bitmap. L'oggetto deve supportare l'interfaccia ITfLangBarItemBitmapButton. |
Un elemento button può funzionare come uno dei seguenti. La funzione dell'elemento del pulsante è determinata dai flag impostati nel membro dwStyle della struttura TF_LANGBARITEMINFO nel metodo ITfLangBarItem::GetInfo .
Elemento | Descrizione |
---|---|
Pulsante | Il pulsante funziona come pulsante di comando standard. Questo stile del pulsante viene identificato dallo stile TF_LBI_STYLE_BTN_BUTTON. ITfLangBarItemButton::OnClick viene chiamato quando viene fatto clic sull'elemento. ITfLangBarItemButton::InitMenu e ITfLangBarItemButton::OnMenuSelect non vengono usati. |
Interruttore | Il pulsante funziona come controllo disattivabile che può mantenere uno stato fatto clic, simile a una casella di controllo. Questo stile di pulsante viene identificato dallo stile TF_LBI_STYLE_BTN_TOGGLE. ITfLangBarItemButton::OnClick viene chiamato quando viene fatto clic sull'elemento. ITfLangBarItemButton::InitMenu e ITfLangBarItemButton::OnMenuSelect non vengono usati. |
Menu | Il pulsante funziona come menu a discesa. Questo stile del pulsante viene identificato dallo stile TF_LBI_STYLE_BTN_MENU. ITfLangBarItemButton::InitMenu viene chiamato quando viene fatto clic sul pulsante. Quando l'utente seleziona un elemento nel menu, la barra della lingua chiama ITfLangBarItemButton::OnMenuSelect con l'identificatore della voce di menu selezionata. ITfLangBarItemButton::OnClickis non usato. |
Quando l'utente fa clic su un pulsante di menu, la barra della lingua chiama ITfLangBarItemButton::InitMenu. L'elemento aggiunge elementi al menu usando l'interfaccia ITfMenu passata a InitMenu .
Per aggiungere un sottomenu al menu, chiamare ITfMenu::AddMenuItem con TF_LBMENUF_SUBMENU. Al termine, viene restituito un nuovo oggetto ITfMenu che rappresenta il sottomenu nel parametro ppMenu di AddMenuItem . Questo nuovo oggetto menu viene usato per aggiungere elementi al sottomenu.
Quando l'utente seleziona un elemento nel menu, la barra della lingua chiama ITfLangBarItemButton::OnMenuSelect con l'identificatore della voce di menu selezionata.
Un servizio di testo deve aggiungere gli elementi alla barra della lingua quando viene chiamato il metodo ITfTextInputProcessor::Activate quando viene chiamato il relativo metodo ITfTextInputProcessor::D eactivate .
Per aggiungere un elemento alla barra della lingua, il servizio di testo ottiene un'interfaccia ITfLangBarItemMgr chiamando ITfThreadMgr ::QueryInterface con IID_ITfLangBarItemMgr. Il servizio di testo chiama quindi ITfLangBarItemMgr::AddItem con il puntatore all'oggetto elemento della barra della lingua.
Il servizio di testo deve rimuovere l'elemento quando disattivato. Il servizio di testo usa la stessa interfaccia ITfLangBarItemMgr usata per aggiungere gli elementi o ottenere un'altra istanza dell'interfaccia. Il servizio di testo chiama quindi ITfLangBarItemMgr::RemoveItem con il puntatore dell'interfaccia dell'elemento da rimuovere.
TSF offre la possibilità di aggiungere voci di menu ai menu della barra della lingua esistenti. Ciò consente a un servizio di testo di aggiungere elementi al menu di un altro servizio di testo senza dover aggiungere un pulsante separato alla barra degli strumenti. Ciò consente inoltre di organizzare le voci di menu in gruppi logici. Ad esempio, un servizio di testo che fornisce funzionalità aggiuntive al servizio testo vocale standard può aggiungere elementi al menu del servizio testo vocale anziché aggiungere il proprio pulsante di menu di primo livello.
Un servizio di testo fornisce un'estensione del menu della barra della lingua implementando un oggetto che supporta l'interfaccia ITfSystemLangBarItemSink . Questa interfaccia funziona esattamente come l'interfaccia ITfLangBarItemButton per un pulsante di menu. Quando viene visualizzato il menu, il servizio di testo che viene esteso chiama ITfSystemLangBarItemSink::InitMenu. L'estensione aggiunge elementi al menu usando l'interfaccia ITfMenu passata a InitMenu. Quando l'utente seleziona un elemento aggiunto dall'estensione, il servizio di testo che viene esteso chiama ITfSystemLangBarItemSink::OnMenuSelect con l'identificatore della voce di menu selezionata.
Per installare un'estensione del menu della barra della lingua, il servizio di testo completa la procedura seguente.
- Ottenere l'interfaccia ITfLangBarItem per l'elemento da estendere chiamando ITfLangBarItemMgr::GetItem con il GUID per l'elemento da estendere.
- Ottenere l'interfaccia ITfSource per l'elemento da estendere chiamando ITfLangBarItem::QueryInterface con IID_ITfSource.
- Chiamare ITfSource::AdviseSink con IID_ITfSystemLangBarItemSink e il puntatore all'oggetto ITfSystemLangBarItemSink . Se ITfSource::AdviseSink ha esito negativo, il servizio di testo non supporta le estensioni del menu.
ITfSource::UnadviseSink ITfSource::AdviseSink
Un servizio di testo può abilitare altri servizi di testo per aggiungere elementi ai menu della barra della lingua, come illustrato in precedenza. Servizio di testo che deve pubblicare il GUID in modo che l'elemento possa essere ottenuto chiamando ITfLangBarItemMgr::GetItem.
Per supportare le estensioni di menu, il servizio di testo deve supportare l'interfaccia ITfSource . La procedura seguente abilita il supporto per una o più estensioni di menu.
- Quando viene chiamato ITfSource::AdviseSink con IID_ITfSystemLangBarItemSink, il servizio di testo deve archiviare l'interfaccia ITfSystemLangBarItemSink e restituire un valore del cookie che identificherà l'estensione.
- Quando viene chiamato ITfLangBarItemButton::InitMenu , il servizio di testo chiama il metodo ITfSystemLangBarItemSink::InitMenu dell'estensione. Il servizio di testo deve implementare un modo per identificare le voci di menu aggiunte dall'estensione anziché gli elementi aggiunti dal servizio di testo stesso.
- Quando ITfLangBarItemButton::OnMenuSelect viene chiamato con un identificatore di voce di menu appartenente a un'estensione, il servizio di testo chiama il metodo ITfSystemLangBarItemSink::OnMenuSelect .
- Quando ITfSource::UnadviseSink viene chiamato con il cookie appropriato, il servizio di testo rimuove l'estensione del menu.