Click here to Skip to main content
Click here to Skip to main content

XHyperLink - yet another hyperlink control

, 16 Oct 2003
Rate this:
Please Sign up or sign in to vote.
XHyperLink is a simple drop-in hyperlink control with optional parent notification.

Introduction

For many years I have used Chris Maunder's excellent Hyperlink control. Recently I needed a hyperlink that would send a notification to the parent dialog. So I started by adding this feature, and then I found that I had added other features too. Here is a list of the new features:

  • Parent notification - the parent window is optionally sent a notification message.
  • New browser window - you can optionally tell the browser to open a new window (same as if you had held down SHIFT key).
  • Background color - you can override default background color and set your own.
  • Disable tooltip - you can optionally disable tooltips for the hyperlink. This makes sense where the hyperlink only sends a notification to the parent window, but does not navigate.
  • Disable URL - optionally disable the URL. Again, this makes sense where the hyperlink only sends a notification to the parent window.
  • Dynamic resizing - you can set new window text at any time and now the control will be resized.
  • Use of IDC_HAND - the MFC hand cursor is used when it is available, before defaulting to the cursor from Winhelp.
  • GoToURL() is now static - now you can say CXHyperLink::GoToURL("http://www.somedomain.com").
  • XHYPERLINK_REPORT_ERROR define - by default this symbol is not defined, which will remove all the strings and message box from ReportError().
  • Resource leak fixed - added DestroyCursor(m_hLinkCursor) that was suggested by Geert Delmeiren.

How to use

To integrate XHyperLink() into your app, you first need to add following files to your project:

  • XHyperLink.cpp
  • XHyperLink.h

Then use the resource editor to add a static control to your dialog, and use Class Wizard to attach a member variable to that control. Note that when adding the static control, you must name it something other than IDC_STATIC.

Next, include the header file XHyperLink.h in the dialog's header file. Then replace the CStatic definition with CXHyperLink. Now you are ready to start using XHyperLink.

Demo app

The XHyperLinkTest.exe demo shows how to use CXHyperLink. The first hyperlink sends an email:

screenshot

The next hyperlink sends a notification to the parent dialog:

screenshot

and the dialog displays a message box:

screenshot

The last hyperlink shows how the text and URL may be dynamically changed:

screenshot

Acknowledgments

Revision history

  • Version 1.0 - 2003 October 17
    • Initial public release.

Usage

This software is released into the public domain. You are free to use it in any way you like. If you modify it or extend it, please to consider posting new code here for everyone to share. This software is provided "as is" with no expressed or implied warranty. I accept no liability for any damage or loss of business that this software may cause.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Hans Dietrich
Software Developer (Senior) Hans Dietrich Software
United States United States
I attended St. Michael's College of the University of Toronto, with the intention of becoming a priest. A friend in the University's Computer Science Department got me interested in programming, and I have been hooked ever since.
 
Recently, I have moved to Los Angeles where I am doing consulting and development work.
 
For consulting and custom software development, please see www.hdsoft.org.






Comments and Discussions

 
GeneralMy vote of 5 PinmemberFranc Morales22-Jun-13 2:43 
QuestionUsing in open source app ok? Pinmembergalets119-Jul-08 9:08 
GeneralThanks PinmemberAnu_Bala10-Mar-08 20:53 
GeneralSome more bugs Pinmemberconch2-Mar-06 14:09 
GeneralExcatly What I Need PinmemberThatsAlok20-Feb-05 18:30 
GeneralFix for SetUnderline() Pinmemberdrake2815-Dec-04 15:55 
In the downloaded code the call to SetUnderline() has no effect because the
underline state has been hard coded in the function declaration. Here are my
changes to give you full control over your hyperlink appearance.
 
1) in the XHyperLink.h file comment out the [= ulHover] in the function
declaration.
 
2) in the XHyperLink.cpp file set the m_nUnderline variable to your desired
default state in the constructor.
 
3) in the PreClassSubwindow override function pass the m_nUnderline variable
in the SetUnderline() function call -- eg. SetUnderline(m_nUnderline);
 
4) in the SetUnderline() function implementation change the first if
statement to the following:
 
if (m_nUnderline == nUnderline && nUnderline != 1)
		return;
 
This forces an "Always Underline" call to set the underline font. Otherwise,
an "Always" call will not underline if it follows a previous "hover" call.
 
After making these changes now you can call m_mycontrol.SetUnderline(state)
and set unique text states for each hyperlink. Of course, if you omit these
calls, then the default state you set in the constructor will determine the
state for all controls.
 
That's all. Hope this helps.
 

GeneralModification: Customized Tooltips Pinmemberdrake2812-Dec-04 7:29 
GeneralRe: Modification: Customized Tooltips PinmemberJaime Olivares15-May-05 5:14 
GeneralUsing in a CView derived... PinmemberPuiu M.14-Jul-04 10:43 
QuestionDoes the length of the url to be set has a cap? Pinmemberdxchen26-Mar-04 8:53 
AnswerNot unless you say so.... Pinmemberdrake2812-Dec-04 7:45 
GeneralWithout using MFC Pinmembermaharsoft6-Jan-04 2:11 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web04 | 2.8.140827.1 | Last Updated 17 Oct 2003
Article Copyright 2003 by Hans Dietrich
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid