RichEditCtrl Syntax Highlighting

I wrote this class when I wanted to add syntax highlighting to a utility that I was writing. I had tried the syntax highlighting classes already available from CodeGuru and found each one lacking in some way for the application that I was writing (I was doing some really odd stuff to get it to work)

I cannot take all the credit though, some of the internal logic came from Randy More's Colorize class.

To use this class, simple setup you application to use CRichEditView, then do a search and replace changing CRichEditView to CRichSyntaxView.

If you override OnInitualUpdate I do some initializing there so either call mine yourself of do similar (or nothing if the defaults are good for you)

void CRichSyntaxView::OnInitialUpdate() 
{ 
 CRichEditView::OnInitialUpdate(); 
 CHARFORMAT cf; 
 cf.dwMask = CFM_FACE | CFM_BOLD; 
 cf.dwEffects = 0; 
 strcpy(cf.szFaceName, "Arial"); 
 GetRichEditCtrl().SetDefaultCharFormat(cf); 
 // Set the printing margins (720 twips = 1/2 inch). 
 SetMargins(CRect(720, 720, 720, 720)); 
}

Member functions:


bool LoadKeyWordFile(CString word); 
bool LoadKeyWordFile(CStdioFile& file);
Are from the guts of Randy More's control, the CString version calls the STDIO file version with a handle to the file pointed to by the CString

void AddComment(LPCTSTR key); 
void AddKeyWord(LPCTSTR key); 
void AddUserDefined(LPCTSTR key);
Do what they sound like, if you don't want to use a keyword file for simply want a way to give the user the ability to add things, Comments are single line comments, KeyWord, and UserDefined are 2 different COLORREF's with similar logic. This just gives you the ability to diferenciate between 2 different types(ie. C/C++ keywords and MFC keywords)

COLORREF USER_DEFINED, COMMENT, KEYWORD;
USER_DEFINED = RGB(100, 100, 0); KEYWORD = RGB(0, 0, 200); COMMENT = RGB(0, 200, 0);
These are the COLOREFS used to set the color of the keywords/symbols. They are initialized by the default constructor as shown

void SetFileName(CString word);
Gives you public access to the protected member sFileName, which is the string used by the OnSave and OnOpen member functions.

void OnSave(); 
void OnOpen();
These are the logic behind the save and restore mechanism. They allow you to save the text in the control to a Rich Text Format file. You need to do any open or save dialogs yourself, they do not work if sFileName.IsEmpty().

void Parse(); 
void ParseRange(int iMin, int iMax);
Causes the contents of the control(or a portion of the contents) to be parsed. Parse() does the whole thing, ParseRange() does a section(between iMin and iMax, iMin does not have to be less than iMax).

Downloads

Download demo source - 5 Kb


Comments

  • Doesn't work on VC 7.0.

    Posted by klee777 on 12/08/2005 10:50am

    Due to lack of the project files, I created it by myself with VC7 and added some necessary initializations, but it doesn't work at all. It highlighted in a wrong place, and that was it. Does anyone have the completely working set of files and send it to me at "klee777@gmail.com"? I can send mine for your review but I can't figure out how to upload it.

    Reply
  • This isn't good.

    Posted by Legacy on 07/18/2003 12:00am

    Originally posted by: John

    This is truly something that requires other source to work, that wasn't included. It wasn't exactly made to plug in anyone else's source as it is.

    Reply
  • DLL ?

    Posted by Legacy on 12/11/2002 12:00am

    Originally posted by: Rob

    Hello.

    Is there a DLL of this I can get ?

    I know nothing about C :-(

    It looks/sounds like a decent control.
    I'd like to (try to) use it.

    Thanks

    Reply
  • Project File

    Posted by Legacy on 11/01/2002 12:00am

    Originally posted by: Edi Wibowo

    To anyone who wants the project file, please email me.

    -Edi

    Reply
  • Find and Replace does not work

    Posted by Legacy on 02/21/2002 12:00am

    Originally posted by: D Schneider

    I used Find and Replace .. and replaced CRichEditView with CRichSyntaxView only to get a slew of errors .. i added the files to the project ... seems so simple in the instructions . wwhat else needs to be done?

    Reply
  • Ctrl; not View

    Posted by Legacy on 03/15/2000 12:00am

    Originally posted by: Tim Smith

    How can I apply this view-derived class to a CRichEditCtrl, with subclassing? What modifications would have to be made? I attempted this myself but to no avail.
    Thankyou for any help.

    Reply
  • How to convert color to white&black only when printing?

    Posted by Legacy on 12/02/1999 12:00am

    Originally posted by: Joo Min, Lee

    I want to change character color when printing.
    But cotrol's color must not be changed.
    I tried to use "pDC->SetTextColor(RGB(0,0,0))" in "PreparingDC(...)" in CRichEditView, but it
    doesn't work.

    Help me...

    Reply
  • flickering

    Posted by Legacy on 07/15/1999 12:00am

    Originally posted by: Giorgi

    Not bad, but what about flickering?

    Reply
  • Can we get a project ?

    Posted by Legacy on 07/14/1999 12:00am

    Originally posted by: xn

    Can you please add a project where we can see
    this "in action" ?

    Thanks,

    XN

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • You probably have several goals for your patient portal of choice. Is "community" one of them? With a bevy of vendors offering portal solutions, it can be challenging for a hospital to know where to start. Fortunately, YourCareCommunity helps ease the decision-making process. Read this white paper to learn more. "3 Ways Clinicians can Leverage a Patient Portal to Craft a Healthcare Community" is a published document owned by www.medhost.com

  • Live Event Date: May 7, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT This eSeminar will explore three popular games engines and how they empower developers to create exciting, graphically rich, and high-performance games for Android® on Intel® Architecture. Join us for a deep dive as experts describe the features, tools, and common challenges using Marmalade, App Game Kit, and Havok game engines, as well as a discussion of the pros and cons of each engine and how they fit into your development …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds