Barra de idioma (Text Services)
Para admitir la adición de un elemento a la barra de idioma, un servicio de texto debe implementar un objeto que admita la interfaz ITfSource y uno de los elementos de control ITfLangBarItem . Cuando se instala el elemento, la barra de idioma instala un receptor ITfLangBarItemSink llamando al elemento ITfSource::AdviseSink con IID_ITfLangBarItemSink. El elemento usa la interfaz ITfLangBarItemSink para notificar a la barra de idioma los cambios, por ejemplo, cuando el elemento está oculto, mostrado, habilitado o deshabilitado.
Se pueden instalar cuatro tipos de elementos de barra de idioma y cada una de las interfaces necesarias se crea a partir de ITfLangBarItem. A continuación se muestran los posibles elementos de control ITfLangBarItem .
Elemento | Descripción |
---|---|
Botón | Un botón de barra de idioma funciona como un botón de comando, un control de alternancia o un menú en la barra de idioma. El objeto debe admitir la interfaz ITfLangBarItemButton. |
Globo | Un globo de barras de idioma funciona como una notificación emergente en la barra de idioma. El objeto debe admitir la interfaz ITfLangBarItemBalloon. |
Bitmap | Un mapa de bits de barra de idioma funciona como un elemento estático en la barra de idioma que muestra un mapa de bits. El objeto debe admitir la interfaz ITfLangBarItemBitmap. |
Botón mapa de bits | Un botón de mapa de bits de barra de idioma funciona como un elemento de botón en la barra de idioma que muestra texto y un mapa de bits. El objeto debe admitir la interfaz ITfLangBarItemBitmapButton. |
Un elemento de botón puede funcionar como cualquiera de los siguientes elementos. La función del elemento de botón viene determinada por las marcas establecidas en el miembro dwStyle de la estructura TF_LANGBARITEMINFO en el método ITfLangBarItem::GetInfo .
Elemento | Descripción |
---|---|
Botón | El botón funciona como un botón de comando estándar. Este estilo de botón se identifica mediante el estilo TF_LBI_STYLE_BTN_BUTTON. Se llama a ITfLangBarItemButton::OnClick cuando se hace clic en el elemento. ITfLangBarItemButton::InitMenu e ITfLangBarItemButton::OnMenuSelect no se usan. |
Botón de alternancia | El botón funciona como un control de alternancia que puede mantener un estado clicado, similar a una casilla. Este estilo de botón se identifica mediante el estilo TF_LBI_STYLE_BTN_TOGGLE. Se llama a ITfLangBarItemButton::OnClick cuando se hace clic en el elemento. ITfLangBarItemButton::InitMenu e ITfLangBarItemButton::OnMenuSelect no se usan. |
Menú | El botón funciona como un menú desplegable. Este estilo de botón se identifica mediante el estilo TF_LBI_STYLE_BTN_MENU. Se llama a ITfLangBarItemButton::InitMenu cuando se hace clic en el botón. Cuando el usuario selecciona un elemento en el menú, la barra de idioma llama a ITfLangBarItemButton::OnMenuSelect con el identificador del elemento de menú seleccionado. ITfLangBarItemButton::OnClickis no se usa. |
Cuando el usuario hace clic en un botón de menú, la barra de idioma llama a ITfLangBarItemButton::InitMenu. El elemento agrega elementos al menú mediante la interfaz ITfMenu que se pasa a InitMenu.
Para agregar un submenú al menú, llame a ITfMenu::AddMenuItem con TF_LBMENUF_SUBMENU. Cuando esto se hace, se devuelve un nuevo objeto ITfMenu que representa el submenú en el parámetro ppMenu de AddMenuItem. Este nuevo objeto de menú se usa para agregar elementos al submenú.
Cuando el usuario selecciona un elemento en el menú, la barra de idioma llama a ITfLangBarItemButton::OnMenuSelect con el identificador del elemento de menú seleccionado.
Un servicio de texto debe agregar sus elementos a la barra de idioma cuando se llama al método ITfTextInputProcessor::Activate y quitarlos cuando se llama a su ITfTextInputProcessor::D eactivate .
Para agregar un elemento a la barra de idioma, el servicio de texto obtiene una interfaz ITfLangBarItemMgr llamando a ITfThreadMgr::QueryInterface con IID_ITfLangBarItemMgr. A continuación, el servicio de texto llama a ITfLangBarItemMgr::AddItem con el puntero al objeto de elemento de barra de idioma.
El servicio de texto debe quitar el elemento cuando se desactive. El servicio de texto usa la misma interfaz ITfLangBarItemMgr que se usa para agregar los elementos u obtener otra instancia de la interfaz. A continuación, el servicio de texto llama a ITfLangBarItemMgr::RemoveItem con el puntero de interfaz del elemento que se va a quitar.
TSF proporciona la capacidad de agregar elementos de menú a los menús de la barra de idioma existentes. Esto permite que un servicio de texto agregue elementos al menú de otro servicio de texto sin tener que agregar un botón independiente a la barra de herramientas. Esto también permite organizar los elementos de menú en grupos lógicos. Por ejemplo, un servicio de texto que proporciona características adicionales al servicio de texto de voz estándar puede agregar elementos al menú del servicio de texto de voz en lugar de agregar su propio botón de menú de nivel superior.
Un servicio de texto proporciona una extensión de menú de barra de idioma mediante la implementación de un objeto que admite la interfaz ITfSystemLangBarItemSink . Esta interfaz funciona exactamente como la interfaz ITfLangBarItemButton para un botón de menú. Cuando se muestra el menú, el servicio de texto que se extiende llama a ITfSystemLangBarItemSink::InitMenu. La extensión agrega elementos al menú mediante la interfaz ITfMenu que se pasa a InitMenu. Cuando el usuario selecciona un elemento agregado por la extensión, el servicio de texto que se extiende llama a ITfSystemLangBarItemSink::OnMenuSelect con el identificador del elemento de menú seleccionado.
Para instalar una extensión de menú de la barra de idioma, el servicio de texto completa los pasos siguientes.
- Obtenga la interfaz ITfLangBarItem del elemento que se va a extender llamando a ITfLangBarItemMgr::GetItem con el GUID del elemento que se va a extender.
- Obtenga la interfaz ITfSource del elemento que se va a extender llamando a ITfLangBarItem::QueryInterface con IID_ITfSource.
- Llame a ITfSource::AdviseSink con IID_ITfSystemLangBarItemSink y el puntero al objeto ITfSystemLangBarItemSink . Si se produce un error en ITfSource::AdviseSink, el servicio de texto no admite extensiones de menú.
ITfSource::UnadviseSinkITfSource::AdviseSink
Un servicio de texto puede permitir que otros servicios de texto agreguen elementos a sus menús de barras de idioma, como se muestra anteriormente. Servicio de texto que debe publicar su GUID para que el elemento se pueda obtener llamando a ITfLangBarItemMgr::GetItem.
Para admitir extensiones de menú, el servicio de texto debe admitir la interfaz ITfSource . En los pasos siguientes se habilita la compatibilidad con una o varias extensiones de menú.
- Cuando se llama a ITfSource::AdviseSink con IID_ITfSystemLangBarItemSink, el servicio de texto debe almacenar la interfaz ITfSystemLangBarItemSink y devolver un valor de cookie que identifique la extensión.
- Cuando se llama a ITfLangBarItemButton::InitMenu , el servicio de texto llama al método ITfSystemLangBarItemSink::InitMenu de la extensión. El servicio de texto debe implementar una manera de identificar los elementos de menú agregados por la extensión en lugar de los elementos agregados por el propio servicio de texto.
- Cuando se llama a ITfLangBarItemButton::OnMenuSelect con un identificador de elemento de menú que pertenece a una extensión, el servicio de texto llama al método ITfSystemLangBarItemSink::OnMenuSelect de las extensiones.
- Cuando se llama a ITfSource::UnadviseSink con la cookie adecuada, el servicio de texto quita la extensión de menú.