Udostępnij za pośrednictwem


Pasek języka (usługi tekstowe)

Implementowanie obiektu paska języka

Aby umożliwić dodawanie elementu do paska języka, usługa tekstowa musi zaimplementować obiekt obsługujący interfejs ITfSource oraz jeden z elementów kontrolki ITfLangBarItem . Po zainstalowaniu elementu pasek języka instaluje ujście ITfLangBarItemSink przez wywołanie elementu ITfSource::AdviseSink za pomocą IID_ITfLangBarItemSink. Element używa interfejsu ITfLangBarItemSink, aby powiadomić pasek języka o zmianach, na przykład gdy element jest ukryty, wyświetlany, włączony lub wyłączony.

Można zainstalować cztery typy elementów paska języka, a każdy z wymaganych interfejsów jest tworzony na podstawie ITfLangBarItem. Poniżej przedstawiono możliwe elementów kontrolek ITfLangBarItem.

Pierwiastek Opis
Guzik Przycisk paska językowego działa jako przycisk polecenia, przełącznik kontrolki lub menu na pasku języka. Obiekt musi obsługiwać interfejs ITfLangBarItemButton.
Balon Dymek paska językowego działa jako wyskakujące powiadomienie na pasku języka. Obiekt musi obsługiwać interfejs ITfLangBarItemBalloon.
Bitmapa Mapa bitowa paska języka działa jako element statyczny na pasku języka, który wyświetla mapę bitową. Obiekt musi obsługiwać interfejs ITfLangBarItemBitmap.
Przycisk mapy bitowej Przycisk mapy bitowej paska języka działa jako element przycisku na pasku języka, który wyświetla tekst i mapę bitową. Obiekt musi obsługiwać interfejs ITfLangBarItemBitmapButton.

 

Style przycisku

Element przycisku może działać jako dowolny z poniższych. Funkcja elementu przycisku jest określana przez flagi ustawione w dwStyle składowej struktury TF_LANGBARITEMINFO w metodzie ITfLangBarItem::GetInfo.

Pierwiastek Opis
Guzik Przycisk działa jako standardowy przycisk polecenia. Ten styl przycisku jest identyfikowany przez styl TF_LBI_STYLE_BTN_BUTTON. ITfLangBarItemButton::OnClick jest wywoływany po kliknięciu elementu. ITfLangBarItemButton::InitMenu i ITfLangBarItemButton::OnMenuSelect nie są używane.
Przełącz przycisk Przycisk działa jako kontrolka przełącznika, która może obsługiwać stan klikniętego, podobnie jak w przypadku pola wyboru. Ten styl przycisku jest identyfikowany przez styl TF_LBI_STYLE_BTN_TOGGLE. ITfLangBarItemButton::OnClick jest wywoływany po kliknięciu elementu. ITfLangBarItemButton::InitMenu i ITfLangBarItemButton::OnMenuSelect nie są używane.
Menu Przycisk działa jako menu rozwijane. Ten styl przycisku jest identyfikowany przez styl TF_LBI_STYLE_BTN_MENU. ITfLangBarItemButton::InitMenu jest wywoływany po kliknięciu przycisku. Gdy użytkownik wybierze element w menu, pasek języka wywołuje element ITfLangBarItemButton::OnMenuSelect z identyfikatorem wybranego elementu menu. ITfLangBarItemButton::OnClickis nie jest używany.

 

Implementowanie przycisku menu

Gdy użytkownik kliknie przycisk menu, pasek języka wywołuje ITfLangBarItemButton::InitMenu. Element dodaje elementy do menu przy użyciu interfejsu ITfMenu przekazanego do initMenu.

Aby dodać podmenu do menu, wywołaj ITfMenu::AddMenuItem za pomocą TF_LBMENUF_SUBMENU. Po wykonaniu tej czynności zostanie zwrócony nowy obiekt ITfMenu reprezentujący podmenu w parametrze ppMenu addMenuItem. Ten nowy obiekt menu służy do dodawania elementów do podmenu.

Gdy użytkownik wybierze element w menu, pasek języka wywołuje ITfLangBarItemButton::OnMenuSelect z identyfikatorem wybranego elementu menu.

Dodawanie elementów do paska językowego

Usługa tekstowa powinna dodać elementy do paska języka, gdy jest wywoływana metoda ITfTextInputProcessor::Activate, i usunąć je, gdy wywoływana jest jej metoda ITfTextInputProcessor::D eactivate.

Aby dodać element do paska języka, usługa tekstowa uzyskuje interfejs ITfLangBarItemMgr przez wywołanie interfejsu ITfThreadMgr::QueryInterface za pomocą IID_ITfLangBarItemMgr. Następnie usługa tekstowa wywołuje ITfLangBarItemMgr::AddItem z wskaźnikiem do obiektu elementu paska języka.

Usługa tekstowa musi usunąć element po dezaktywacji. Usługa tekstowa używa tego samego interfejsu ITfLangBarItemMgr używanego do dodawania elementów lub uzyskiwania innego wystąpienia interfejsu. Następnie usługa tekstowa wywołuje ITfLangBarItemMgr::RemoveItem z wskaźnikiem interfejsu elementu w celu usunięcia.

Rozszerzanie elementów paska języka systemu

TSF umożliwia dodawanie elementów menu do istniejących menu paska języka. Dzięki temu usługa tekstowa może dodawać elementy do menu innej usługi tekstowej bez konieczności dodawania oddzielnego przycisku do paska narzędzi. Umożliwia to również organizowanie elementów menu w grupy logiczne. Na przykład usługa tekstowa, która udostępnia dodatkowe funkcje standardowej usługi tekstowej mowy, może dodawać elementy do menu usługi zamiany mowy zamiast dodawać własny przycisk menu najwyższego poziomu.

Usługa tekstowa udostępnia rozszerzenie menu paska języka przez zaimplementowanie obiektu obsługującego interfejs ITfSystemLangBarItemSink. Ten interfejs działa dokładnie tak jak interfejs ITfLangBarItemButton dla przycisku menu. Po wyświetleniu menu usługa tekstowa, która jest rozszerzona, wywołuje ITfSystemLangBarItemSink::InitMenu. Rozszerzenie dodaje elementy do menu przy użyciu interfejsu ITfMen u przekazanego do InitMenu. Gdy użytkownik wybierze element dodany przez rozszerzenie, usługa tekstowa, która jest rozszerzona, wywołuje ITfSystemLangBarItemSink::OnMenuSelect z identyfikatorem wybranego elementu menu.

Aby zainstalować rozszerzenie menu paska języka, usługa tekstowa wykonuje następujące kroki.

  1. Uzyskaj interfejs ITfLangBarItem dla elementu, który ma zostać rozszerzony, wywołując ITfLangBarItemMgr::GetItem za pomocą identyfikatora GUID, aby element został rozszerzony.
  2. Uzyskaj interfejs ITfSource dla elementu, który ma być rozszerzany przez wywołanie metody ITfLangBarItem::QueryInterface za pomocą IID_ITfSource.
  3. Wywołaj ITfSource::AdviseSink za pomocą IID_ITfSystemLangBarItemSink i wskaźnik do obiektu ITfSystemLangBarItemSink. Jeśli usługa ITfSource::AdviseSink zakończy się niepowodzeniem, usługa tekstowa nie obsługuje rozszerzeń menu.

ITfSource::UnadviseSinkITfSource::AdviseSink

Obsługa rozszerzeń menu paska języka

Usługa tekstowa może umożliwić innym usługom tekstowym dodawanie elementów do menu paska języka, jak pokazano powyżej. Usługa tekstowa, która musi opublikować identyfikator GUID, aby można było uzyskać element, wywołując ITfLangBarItemMgr::GetItem.

Aby obsługiwać rozszerzenia menu, usługa tekstowa musi obsługiwać interfejs ITfSource. Poniższe kroki umożliwiają obsługę co najmniej jednego rozszerzenia menu.

  1. Po wywołaniu ITfSource::AdviseSink z IID_ITfSystemLangBarItemSink usługa tekstowa musi przechowywać ITfSystemLangBarItemSink interfejs i zwrócić wartość pliku cookie, która zidentyfikuje rozszerzenie.
  2. Po wywołaniu ITfLangBarItemButton::InitMenu usługa tekstowa wywołuje metodę ITfSystemLangBarItemSink::InitMenu. Usługa tekstowa musi zaimplementować sposób identyfikowania elementów menu dodanych przez rozszerzenie, a nie elementów dodanych przez samą usługę tekstową.
  3. Gdy ITfLangBarItemButton::OnMenuSelect jest wywoływana z identyfikatorem elementu menu, który należy do rozszerzenia, usługa tekstowa wywołuje rozszerzenia ITfSystemLangBarItemSink::OnMenuSelect metody.
  4. Gdy ITfSource::UnadviseSink jest wywoływana z odpowiednim plikiem cookie, usługa tekstowa usuwa rozszerzenie menu.

jak skonfigurować struktury usług tekstowych

paska językowego