Creating a Spell Dialog Box

Following are the dialog box procedure and supporting functions for the spelling checker dialog box.

HWND hwndMain;

HWND hwndEdit;

char achTemp[256]; /* temporary buffer */

LPSTR lpstrDict; /* buffer for dictionary file */

LPSTR *paLpDict; /* array of pointers to words */

UINT cWords; /* number of words */

/********************************************************

FUNCTION: SpellDlgProc

PURPOSE: Dialog procedure for Spell dialog box.

  • *******************************************************/

BOOL CALLBACK SpellDlgProc(hwndDlg, msg, wParam, lParam)

HWND hwndDlg;

UINT msg;

WPARAM wParam;

LPARAM lParam;

{

switch (msg) {

case WM_INITDIALOG:

if (!OpenDictionary()) {

EndDialog(hwndDlg, 0);

break;

}

SendMessage(hwndEdit, EM_SETSEL, 0, 0);

do

if (!SelectNextWord(hwndEdit, achTemp)) {

GlobalFree((HGLOBAL) lpstrDict);

LocalFree((HLOCAL) paLpDict);

EndDialog(hwndDlg, 0);

break;

}

while (!InitSpellList(

GetDlgItem(hwndDlg, IDCOMBO), achTemp));

break;

case WM_COMMAND:

switch (LOWORD(wParam)) {

case IDCOMBO:

if (HIWORD(wParam) != CBN_DBLCLK)

break;

/* For a double-click, process the OK case. */

case IDOK:

SendDlgItemMessage(hwndDlg, IDCOMBO,

WM_GETTEXT, sizeof(achTemp),

(LPARAM) achTemp);

SendMessage(hwndEdit, EM_REPLACESEL, 0,

(LPARAM) achTemp);

/* Fall through to get the next word. */

case IDIGNORE:

do

if (!SelectNextWord(hwndEdit, achTemp)) {

EndDialog(hwndDlg, 0);

break;

}

while (!InitSpellList(GetDlgItem(hwndDlg,

IDCOMBO), achTemp));

break;

case IDCANCEL:

EndDialog(hwndDlg, 0);

}

break;

case WM_DESTROY:

GlobalFree((HGLOBAL) lpstrDict);

LocalFree((HLOCAL) paLpDict);

break;

default:

return FALSE;

}

return TRUE;

}

/********************************************************

FUNCTION: InitSpellList

PURPOSE: Initializes the selection field and list

of suggestions for the specified word, if

it is not in the dictionary.

RETURNS: If the list is initialized, the return

value is TRUE. If an error occurs or the

word is in the dictionary, the return

value is FALSE.

  • *******************************************************/

BOOL PASCAL InitSpellList(HWND hwndCombo, LPSTR lpszWord)

{

int min = 0; /* beginning of search range */

int max = cWords; /* end of search range */

int n; /* index of word */

int cmp; /* result of comparison */

char ch; /* first character in word */

ch = *lpszWord;

CharLowerBuff(&ch, 1);

/*

* Perform a binary search for the word.

*

* The global array paLpDict contains pointers to words

* in the global array lpstrDict. These two variables are

* initialized by the OpenDictionary function.

*/

n = max / 2;

while (min < max) {

cmp = lstrcmpi(lpszWord, paLpDict[n]);

if (cmp == 0)

return FALSE; /* not misspelled */

if (cmp < 0)

max = n;

else

min = n + 1;

n = (min + max) / 2;

}

/* List words beginning with the same letter as lpszWord. */

SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);

while (n > 0 && *paLpDict[n - 1] == ch)

n--;

while (*paLpDict[n] == ch)

SendMessage(hwndCombo, CB_ADDSTRING,

0, (LPARAM) paLpDict[n++]);

/* Place the word in the selection field. */

SendMessage(hwndCombo, WM_SETTEXT, 0, (LPARAM) lpszWord);

return TRUE;

}

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database