|
////////////////////////////////////////////////////////////////
// PixieLib(TM) Copyright 1997-1999 Paul DiLascia
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
//
#pragma once
//////////////////
// Simple text hyperlink derived from CString
//
class CHyperlink : public CString {
public:
CHyperlink(LPCTSTR lpLink = NULL) : CString(lpLink) { }
~CHyperlink() { }
const CHyperlink& operator=(LPCTSTR lpsz) {
CString::operator=(lpsz);
return *this;
}
operator LPCTSTR() {
return CString::operator LPCTSTR();
}
HINSTANCE Navigate() {
return IsEmpty() ? NULL :
ShellExecute(0, _T("open"), *this, 0, 0, SW_SHOWNORMAL);
}
};
class CStaticLink : public CStatic {
public:
DECLARE_DYNAMIC(CStaticLink)
CStaticLink(LPCTSTR lpText = NULL, BOOL bDeleteOnDestroy=FALSE);
~CStaticLink() { }
// Use this if you want to subclass and also set different URL
BOOL SubclassDlgItem(UINT nID, CWnd* pParent, LPCTSTR lpszLink=NULL) {
if (lpszLink)
m_link = lpszLink;
return CStatic::SubclassDlgItem(nID, pParent);
}
void EnableShellExecute(bool bEnable)
{
m_bShellExecute= bEnable;
}
void SetURL(LPCTSTR pszUrl)
{
m_link = pszUrl;
}
// Hyperlink contains URL/filename. If NULL, I will use the window text.
// (GetWindowText) to get the target.
CHyperlink m_link;
COLORREF m_color;
// Default colors you can change
// These are global, so they're the same for all links.
static COLORREF g_colorUnvisited;
static COLORREF g_colorVisited;
// Cursor used when mouse is on a link--you can set, or
// it will default to the standard hand with pointing finger.
// This is global, so it's the same for all links.
static HCURSOR g_hCursorLink;
protected:
bool m_bShellExecute;
CFont m_font; // underline font for text control
BOOL m_bDeleteOnDestroy; // delete object when window destroyed?
BOOL TryNavigate();
virtual void PostNcDestroy();
// message handlers
DECLARE_MESSAGE_MAP()
afx_msg UINT OnNcHitTest(CPoint point);
afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
};
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
In December 2004, I left my day job to create appTranslator (
http://www.apptranslator.com), a great localization tool for your Visual C++ applications.
appTranslator helps you painlessly manage the translations of your applications thanks to WYWIWYG translation-oriented resource editors, immediate tracking of items to be translated, immediate tracking of new and modified items, merging of translations, and more...
Don't hesitate to drop me a line. I love feedback