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:50amDue 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.
ReplyThis isn't good.
Posted by Legacy on 07/18/2003 12:00amOriginally 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.
ReplyDLL ?
Posted by Legacy on 12/11/2002 12:00amOriginally 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
ReplyProject File
Posted by Legacy on 11/01/2002 12:00amOriginally posted by: Edi Wibowo
To anyone who wants the project file, please email me.
-Edi
ReplyFind and Replace does not work
Posted by Legacy on 02/21/2002 12:00amOriginally 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?
ReplyCtrl; not View
Posted by Legacy on 03/15/2000 12:00amOriginally 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.
ReplyThankyou for any help.
How to convert color to white&black only when printing?
Posted by Legacy on 12/02/1999 12:00amOriginally 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...
Replyflickering
Posted by Legacy on 07/15/1999 12:00amOriginally posted by: Giorgi
Not bad, but what about flickering?
ReplyCan we get a project ?
Posted by Legacy on 07/14/1999 12:00amOriginally posted by: xn
Can you please add a project where we can see
this "in action" ?
Thanks,
XN
Reply