Callbacks personalizzate nelle wxhtmlwindow

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()) ;