26 Controles de enlace

Control de hiperenlace
Los controles wxHyperlinkCtrl están pensados para añadir enlaces a páginas web, del mismo modo que los enlaces de navegación que aparecen en las páginas en los navegadores.
El funcionamiento normal es que, cuando el usuario pulsa sobre él se abra la página web correspondiente en el navegador por defecto del sistema.
Por defecto su apariencia es un texto subrayado y en color azul, y si se mantiene el ratón sobre él se muestra un tooltip con el enlace real.
Por supuesto, se pueden usar URLs con diferentes esquemas, es decir, que empiecen con "http://", "https://", "mailto://", "file://", etc. Y en cada caso se abrirá el programa asociado por defecto, es decir, un navegador si se trata de una página web, un editor de texto para ficheros de texto, un programa de visualización de imágenes, uno de correo electrónico, etc.
Estilos
Disponemos de varios estilos propios de estos controles, aunque no todos estarán disponibles en todas las plataformas. Además, de los estilos heredados de wxControl y wxWindow.
Los estilos wxHL_ALIGN_LEFT, wxHL_ALIGN_RIGHT y wxHL_ALIGN_CENTRE afectan a la posición del control, alineando el texto a la izquierda, la derecha o en el centro.
wxHL_CONTEXTMENU permite acceder a un menú contextual que ofrece la opción de copiar la dirección del enlace asociada al control.
El estilo por defecto, wxHL_DEFAULT_STYLE incluye los estilos wxBORDER_NONE, wxHL_CONTEXTMEN y |wxHL_ALIGN_CENTRE.
Creación de un control en enlace
El constructor requiere los parámetros habituales, añadiendo uno en la cuarta posición para el texto del enlace:
- La ventana padre.
- El identificador.
- El texto de la etiqueta.
- El texto del enlace, la URL.
- La posición.
- El tamaño.
- Los estilos.
- Un nombre opcional.
#include <wx/hyperlink.h> ... enlace = new wxHyperlinkCtrl(this, idHyperlink, _T("Con Clase"), _T("https://conclase.net/winapi/wxwidgets/cap26"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE);
Eventos
Estos controles sólo generan un evento EVT_HYPERLINK cuando el usuario pulsa sobre ellos.
wxBEGIN_EVENT_TABLE(HyperlinkCtrl, wxDialog) ... EVT_HYPERLINK(idHyperlink, HyperlinkCtrl::OnHyperlink) ... wxEND_EVENT_TABLE()
La función que procesa estos eventos recibirá un argumento de tipo wxHyperlinkEvent.
Si queremos que el control tenga el comportamiento por defecto, es decir, que procese el enlace asociado, no será necesario responder a esta notificación. Si lo hacemos, pero ignoramos el evento, llamando a Skip, el resultado es el mismo:
void HyperlinkCtrl::OnHyperlink(wxHyperlinkEvent& event) { event.Skip(); }
Procesar este evento sólo tiene utilidad si queremos modificar el comportamiento por defecto del control.
Personalización
Por defecto, el texto del control se muestra de color azul, pero podemos modificarlo usando el método SetNormalColour.
También podemos modificar el color del texto cuando el puntero del ratón está sobre él, mediante SetHoverColour.
Y como sucede en cualquier página web, los enlaces cambian de color si ya se han visitado al menos una vez, se pude modificar ese color mediante el método SetVisitedColour.
En algunas plataformas estas opciones no están soportadas en la versión nativa, pero podemos disponer de ellas si usamos la versión genérica del control.
Para ello tendremos que incluir dos ficheros de cabecera y declarar y crear la versión genérica del control:
#include <wx/hyperlink.h> #include <wx/generic/hyperlink.h> ... wxGenericHyperlinkCtrl* enlace; ... enlace = new wxGenericHyperlinkCtrl(this, idHyperlink, _T("Con Clase"), _T("https://conclase.net/winapi/wxwidgets/cap26"),
Finalmente, el método SetVisited nos permite modificar el estado del visitado de un control.
Botones de enlace

Los controles wxCommandLinkButton son botones normales, se pueden usar para lo mismo que los hiperenlaces, pero están pensados para visualizar que al pulsarlos se cambiará el foco a otra ventana,
Su uso es habitual en los diálogos wxWizard, que se componen de una cadena de diálogos sucesivos. En esos casos se usan estos controles para avanzar o retroceder en la secuencia de diálogos.
Estos controles no tienen estilos propios ni tampoco soporta los estilos propios de la clase wxButton.
Creación de un control CommnadLinkButton
El constructor es idéntico al del control wxHyperlinkCtrl . La única diferencia es el nombre de los parámetros. En los hiperenlaces tenemos 'label' y 'url', u en estos controles esos parámetros se llaman 'mainlabel' y 'note'.
Visualmente, en estos controles se muestran tanto la etiqueta como la nota, mientras que en los hiperenlaces se muestra sólo la etiqueta y la url se implementa como un tooltip.
Notificaciones
Estos controles generan los mismas eventos que wxButton.
wxBEGIN_EVENT_TABLE(CommandLinkButton, wxDialog) ... EVT_BUTTON(idCommandLinkButton, CommandLinkButton::OnCommandLinkButton) ... wxEND_EVENT_TABLE()
Si queremos que la nota se trate como un hiperenlace tendremos que invocar la función wxLaunchDefaultBrowser, usando como argumento el texto de la nota:
void CommandLinkButton::OnCommandLinkButton(wxCommandEvent& event) { wxLaunchDefaultBrowser(boton->GetNote()); }
Otros métodos
Se trata de un control simple que únicamente dispone de métodos para obtener y modificar la etiqueta y la nota:
- GetLabel: Obtiene la etiqueta principal y la nota, es decir, el texto completo de la etiqueta.
- GetMainLabel: Obtiene la etiqueta principal.
- GetNote: Obtiene la nota.
- SetLabel: Establece la etiqueta completa.
- SetMainLabel: Establece la etiqueta principal.
- SetMainLabelAndNote: Establece la etiqueta principal y la nota.
- SetNote: Establece la nota.
Ejemplo 26
Windows:
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 26 | wx026.zip | 2025-09-08 | 7592 bytes | 7 |
Linux:
Nombre | Fichero | Fecha | Tamaño | Contador | Descarga |
---|---|---|---|---|---|
Ejemplo 26 | wx026.tar.gz | 2025-09-08 | 4629 bytes | 6 |