Autore: Fabio Di Matteo
Ultima revisione: 17/02/2011
Questa guida nasce dall'esigenza di dover realizzare una applicazione con una finestra contenente una wxhtmlwindow in grado di poter aprire solo alcuni link nel browser web predefinito e tutti gli altri all'interno di se stessa .
Ovvero:
Link che si apriranno nel proprio browser web
<a href="http://www.google.it" target="_newpage">www.google.it </a>
Come si puo' notare ci siamo inventati un nuovo target (“_newpage”) che ci servira' per far capire alla nostra classe derivata da wxhtmlwindow di aprire il link nel browser.
Basta procedere con l'override della classe come segue.
class HtmlWindow: public wxHtmlWindow { public: HtmlWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxHW_SCROLLBAR_AUTO, const wxString& name = _T("htmlWindow")); void OnLinkClicked(const wxHtmlLinkInfo& link); }; HtmlWindow::HtmlWindow(wxWindow *parent, wxWindowID id, const wxPoint& pos, const wxSize& size, long style, const wxString& name) : wxHtmlWindow(parent, id, pos, size, style, name) { } void HtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link) { /*Definiamo nuovi target per il tag 'A' */ if (link.GetTarget()==wxT("_newpage")) wxLaunchDefaultBrowser(link.GetHref()); //aggiungere qui nuovi target else if (link.GetTarget()==wxT("")) wxHtmlWindow::OnLinkClicked(link); }
Possiamo ,ovviamente, inserire piu' target per il tag A semplicemente aggiungendo righe del genere al metodo void HtmlWindow::OnLinkClicked(const wxHtmlLinkInfo& link)
:
if (link.GetTarget()==wxT("_miotarget")) wxMessageBox(link.GetHref()) ;