Click here to Skip to main content
15,035,283 members
Articles / Desktop Programming / MFC
Posted 20 Apr 2004


71 bookmarked


Rate me:
Please Sign up or sign in to vote.
4.91/5 (34 votes)
25 Apr 2004CPOL2 min read
A CEdit control with a spell checker and thesaurus.

Sample Image - main.jpg


Sometimes, it would be nice to have an edit box with a spell checker and/or thesaurus built in, especially if you use edit boxes to enter longer messages (E.g. for logs, descriptions, IM messages, ...).

While searching the web, I found some free spell checkers, but most of them didn't work on Windows, or missed many language dictionaries. Then I found MySpell which is used by the free OpenOffice suite. It is distributed under a BSD license, which means you can use it in commercial applications. You just have to mention the copyright somewhere in your app.

And since MySpell is used by OpenOffice, there are dictionaries for almost every language available. And those dictionary files are compatible with the ones Mozilla uses.

I found MySpell, I started hacking on extending the CEdit control to make good use of it. Here's what the result looks like:




To use the CSpellEdit control:

  1. Add the files SpellEdit.h, SpellEdit.cpp and all files in the MySpell folder to your project.
  2. Replace all CEdit variables with CSpellEdit (don't forget to #include the SpellEdit.h file).

Since the default context menu of the edit control is replaced (see PJ Arends' article here on how to do that), you might want to translate those strings (default is English). To do that, you can add the following strings to your resource stringtable:


If those strings are not present, then the default English strings will be used.

Also: if no dictionary files are found or set, then the CSpellEdit control will do nothing, i.e. it will be exactly like the normal CEdit control.


CSpellEdit searches for dictionary files at startup automatically. It looks for those files in the same directory as the program is and in the /dic/ subfolder. For example in:

  • c:\program files\myapp\
  • c:\program files\myapp\dic\

Since there could be many dictionary files in those folders, CSpellEdit first checks if there are dictionaries for the current user locale. If those are not found, then it looks for the English dictionaries. Example:

Current user locale is: de_CH
try myapp\de_CH.*
try myapp\dic\de_CH.*
try myapp\de_DE.*
try myapp\dic\de_DE.*
try myapp\en_US.*
try myapp\dic\en_US.*

If you don't want to store the dictionary files in your program's folder, you can set the paths to the dictionary files with the SetDictPaths() and SetThesaurPaths() methods.


26.04.2004 - if found in user32.dll, the default context menu of the edit control is used.


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


About the Author

Software Developer
Switzerland Switzerland

Comments and Discussions

QuestionDebug Assertion Failure! Pin
Member 810351615-May-13 9:55
MemberMember 810351615-May-13 9:55 
QuestionCRichEditCtrl Pin
andwan05-Nov-12 0:18
Memberandwan05-Nov-12 0:18 
GeneralHTML error Pin
William Winner4-Feb-10 8:04
MemberWilliam Winner4-Feb-10 8:04 
GeneralAre there any ports of MySpell Pin
zdacom13-Aug-09 19:39
Memberzdacom13-Aug-09 19:39 
QuestionDude the ese wont shoe the red underlines? Pin
mrtutorial0826-Aug-08 6:28
Membermrtutorial0826-Aug-08 6:28 
GeneralInteresting Pin
garaber13-Dec-06 5:56
Membergaraber13-Dec-06 5:56 
Questionhunspell ? Pin
gogac21-Jun-06 14:09
Membergogac21-Jun-06 14:09 
QuestionAnyone got this to compile???? Pin
Tim Hutzler14-Mar-06 7:29
MemberTim Hutzler14-Mar-06 7:29 
GeneralPermission to use SpellEdit Pin
keith27033-Jan-06 5:21
Memberkeith27033-Jan-06 5:21 
QuestionMySpell Pin
Hesham Desouky28-Sep-05 9:07
MemberHesham Desouky28-Sep-05 9:07 
GeneralAdding new words to the dictionary files Pin
keith270319-May-05 0:17
Memberkeith270319-May-05 0:17 
GeneralRe: Adding new words to the dictionary files Pin
m00m0019-May-05 16:16
Memberm00m0019-May-05 16:16 
Generalmemory leak when performing NGRAM suggestion Pin
m00m0016-May-05 19:11
Memberm00m0016-May-05 19:11 
Generalcode can not compiled by VS.Net 2002 Pin
m00m0010-May-05 18:55
Memberm00m0010-May-05 18:55 
GeneralRe: code can not compiled by VS.Net 2002, nevermind Pin
Anonymous11-May-05 1:34
MemberAnonymous11-May-05 1:34 
GeneralRe: code can not compiled by VS.Net 2002, nevermind Pin
Michael Bergman16-Jun-05 14:27
MemberMichael Bergman16-Jun-05 14:27 
Generalhelp Pin
rjnl21-Mar-05 9:12
Memberrjnl21-Mar-05 9:12 
GeneralRe: help Pin
Ed K1-May-05 14:30
MemberEd K1-May-05 14:30 
GeneralRe: help Pin
rjnl2-May-05 13:39
Memberrjnl2-May-05 13:39 
Generalhelp Pin
rjnl21-Mar-05 9:11
Memberrjnl21-Mar-05 9:11 
GeneralPatch Pin
marren1-May-04 2:48
Membermarren1-May-04 2:48 
GeneralGPL Dictionary Pin
BoazHarrosh27-Apr-04 21:52
MemberBoazHarrosh27-Apr-04 21:52 
GeneralRe: GPL Dictionary Pin
SteveKing28-Apr-04 3:47
MemberSteveKing28-Apr-04 3:47 
GeneralRe: GPL Dictionary Pin
Anonymous18-May-05 2:49
MemberAnonymous18-May-05 2:49 
GeneralRe: GPL Dictionary Pin
BoazHarrosh18-May-05 3:57
MemberBoazHarrosh18-May-05 3:57 

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.