/*
* Module ID: hyperlink.h
* Title : CHyperLink Declaration.
*
* Author : Olivier Langlois <olanglois@sympatico.ca>
* Date : November 15, 2005
*
* To read the article describing this class, visit
* http://www3.sympatico.ca/olanglois/hyperlinkdemo.htm
*
* Note: Strongly inspired by Neal Stublen code
* Minor ideas come from Chris Maunder and Paul DiLascia code
*
* Revision :
*
* 001 26-Nov-2005 - Olivier Langlois
* - Added changes to make CHyperLink compatible with UNICODE
* - Use dynamic memory allocation for the URL string
*/
#ifndef _HYPERLINK_H_
#define _HYPERLINK_H_
#include "windows.h"
class CHyperLink
{
public:
CHyperLink(void);
virtual ~CHyperLink(void);
BOOL ConvertStaticToHyperlink(HWND hwndCtl, LPCTSTR strURL);
BOOL ConvertStaticToHyperlink(HWND hwndParent, UINT uiCtlId, LPCTSTR strURL);
BOOL setURL( LPCTSTR strURL);
LPCTSTR getURL(void) const { return m_strURL; }
protected:
/*
* Override if you want to perform some action when the link has the focus
* or when the cursor is over the link such as displaying the URL somewhere.
*/
virtual void OnSelect(void) {}
virtual void OnDeselect(void) {}
LPTSTR m_strURL; // hyperlink URL
private:
static COLORREF g_crLinkColor, g_crVisitedColor;// Hyperlink colors
static HCURSOR g_hLinkCursor; // Cursor for hyperlink
static HFONT g_UnderlineFont; // Font for underline display
static int g_counter; // Global resources user counter
BOOL m_bOverControl; // cursor over control?
BOOL m_bVisited; // Has it been visited?
HFONT m_StdFont; // Standard font
WNDPROC m_pfnOrigCtlProc;
void createUnderlineFont(void);
static void createLinkCursor(void);
void createGlobalResources(void)
{
createUnderlineFont();
createLinkCursor();
}
static void destroyGlobalResources(void)
{
/*
* No need to call DestroyCursor() for cursors acquired through
* LoadCursor().
*/
g_hLinkCursor = NULL;
DeleteObject(g_UnderlineFont);
g_UnderlineFont = NULL;
}
void Navigate(void);
static void DrawFocusRect(HWND hwnd);
static LRESULT CALLBACK _HyperlinkParentProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK _HyperlinkProc(HWND hwnd, UINT message,
WPARAM wParam, LPARAM lParam);
};
#endif /* _HYPERLINK_H_ */