Click here to Skip to main content
12,357,130 members (72,023 online)
Click here to Skip to main content
Add your own
alternative version

Stats

109.8K views
3.4K downloads
54 bookmarked
Posted

Multiline Hyper Edit Control

, 31 Aug 2004 CPOL
Rate this:
Please Sign up or sign in to vote.
A multiline hyper edit control derived from CEdit.

Sample Image - hyperedit.png

Introduction

CHyperEdit was inspired by the following message post.

CHyperEdit is a drop-in replacement for the standard MFC CEdit control, and requires no additional initialization or function calls in order to be fully functional. However, it is possible to fine tune what exactly constitutes a hyperlink-able token, and can easily be achieved in a derived CHyperEdit class by overriding the virtual function IsWordHyper; click here to view example.

Features

  • Customizable hyperlink and hover colors.
  • Multiple hyperlinks mix freely with normal text.
  • Extensible hyperlink tokenizer.

API

public

  • COLORREF GetNormalColor()
  • COLORREF GetHoverColor()
  • void SetLinkColors(COLORREF clrNormal, COLORREF clrHover)
  • CString IsHyperlink(CPoint& pt)

protected

  • virtual BOOL IsWordHyper(const CString& csToken)

Usage

Basic usage

Using CHyperEdit couldn't be easier, just add a normal EDIT control to your dialog. Right click on the EDIT control you just added and select Classwizard. Click on the Member Variables tab. Double click on the control ID of the EDIT control you just added. Enter a Member Variable name and instead of Value in the Category drop down, select Control. Under the Variable Type drop down, you should now see a CHyperEdit.

Note: You may have to delete your *.clw file and rebuild it before CHyperEdit becomes available.

If the CHyperEdit class isn't available, you can just select CEdit and replace any instance of CEdit with CHyperEdit. You may also have to manually add the required #include directives before compiling.

Advanced usage

For more control over CHyperEdit, you can choose to override the default functionality of the hyperlink tokenizer and better dictate what exactly constitutes a hyperlink-able URL. For example, the following snippet extends the default behavior by only hyperlinking tokens which include www in the domain name. This would be useful if we wished to ignore IP addresses.

// Derived class overrides this function to extend hyperlinking
BOOL CMyHyperEdit::IsWordHyper(const CString& csToken) const
{
    if(IsWhiteSpace(csToken, 0)) return FALSE;
    CString csTemp(csToken); // Make a temp copy so we can convert it's case
    csTemp.MakeLower();

         // Ignore IP addresses
    if(csTemp.Left(7) == "http://www") return TRUE;

    return FALSE; // Not a valid token by default
}

Note: You could also use a readily available regex library like regex++ for much more complex syntax checking of URLs or email addresses.

IsHyperlink is a publicly available function whose purpose may not be immediately apparent; truth be told, I only now realized that it may be useful. Smile | :)

This function returns the entire hyperlink token (if any) that the mouse is currently over. If the mouse is not over any hyperlink token when this function is called, it returns the results of a CString::Empty().

With a little imagination, some interesting possibilities arise. You could, for example, use a WM_TIMER in your application and check the return value of IsHyperlink; if it returns a valid URL for a web site, you could download the HTML page and extract the TITLE and display it in a tool tip.

License

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

Share

About the Author

alex.barylski
Web Developer
Canada Canada
No Biography provided

You may also be interested in...

Comments and Discussions

 
GeneralPosFromChar() doesn't work in xp(or win2000) Pin
kingwho3-Jan-11 16:09
memberkingwho3-Jan-11 16:09 
GeneralFont fix for Vista Pin
Guido Sievers18-Aug-09 22:55
memberGuido Sievers18-Aug-09 22:55 
GeneralProblem with chinese characters Pin
javan24-May-09 2:53
memberjavan24-May-09 2:53 
GeneralRe: Problem with chinese characters Pin
XanderXP25-May-09 7:11
memberXanderXP25-May-09 7:11 
GeneralRe: Problem with chinese characters Pin
kingwho3-Jan-11 15:51
memberkingwho3-Jan-11 15:51 
GeneralVery Nice indeed Pin
jmeaux25-Dec-07 10:14
memberjmeaux25-Dec-07 10:14 
QuestionOCX version Pin
Kamil Maly4-Jul-07 5:11
memberKamil Maly4-Jul-07 5:11 
AnswerRe: OCX version Pin
Hockey4-Jul-07 8:06
memberHockey4-Jul-07 8:06 
Questionoutputing multple lines in edit bow Pin
jamesx7730-Jun-07 1:00
memberjamesx7730-Jun-07 1:00 
AnswerRe: outputing multple lines in edit bow Pin
Hockey1-Jul-07 20:11
memberHockey1-Jul-07 20:11 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    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 | Terms of Use | Mobile
Web02 | 2.8.160621.1 | Last Updated 1 Sep 2004
Article Copyright 2004 by alex.barylski
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid