На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

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;
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Создание Диалогового Ящика Spell



Следующее является диалоговой процедурой ящика и поддерживать функционирует для диалогового ящика орфографического корректора.

HWND hwndMain;
HWND hwndEdit;
символ achTemp[256]; /* временный буфер */

LPSTR lpstrDict; /* буфер для словарного файла */ LPSTR *paLpDict; /* массив указателей в слово */ UINT cWords; /* количество слова */

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

ФУНКЦИЯ: SpellDlgProc

ЦЕЛЬ: процедура Диалога для Писать по буквам диалоговый ящик.

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


BOOL CALLBACK SpellDlgProc(hwndDlg, msg, wParam, lParam) HWND hwndDlg;
msg UINT;
WPARAM wParam;
LPARAM lParam;
{
ключ (msg) { случай WM_INITDIALOG: если (!OpenDictionary()) { EndDialog(hwndDlg, 0);
прерывание;
}
SendMessage(hwndEdit, EM_SETSEL, 0, 0);
сделайте
если (!SelectNextWord(hwndEdit, achTemp)) { GlobalFree((HGLOBAL) lpstrDict);

LocalFree((HLOCAL) paLpDict);
EndDialog(hwndDlg, 0);
прерывание;
}
пока (!InitSpellList( GetDlgItem(hwndDlg, IDCOMBO), achTemp));
прерывание;

случай WM_COMMAND: ключ прерывания (LOWORD(wParam)) { случай IDCOMBO: если (HIWORD(wParam) != CBN_DBLCLK);

/* Для двойного-щелчка, обработайте case. OK */


случай IDOK:
SendDlgItemMessage(hwndDlg, IDCOMBO, WM_GETTEXT, sizeof(achTemp), (LPARAM) achTemp);
SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM) achTemp);

/* Провалите, чтобы получать следующий word. */

случай IDIGNORE: сделайте
если (!SelectNextWord(hwndEdit, achTemp)) {

EndDialog(hwndDlg, 0);
прерывание;
}
пока (!InitSpellList(GetDlgItem(hwndDlg, IDCOMBO), achTemp));
прерывание;

случай IDCANCEL: EndDialog(hwndDlg, 0);
}
прерывание;

случай WM_DESTROY: GlobalFree((HGLOBAL) lpstrDict);
LocalFree((HLOCAL) paLpDict);

прерывание;

невыполнение: обратная ЛОЖЬ;
}
возвращайтесь ВЕРНО;
}


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

ФУНКЦИЯ: InitSpellList

ЦЕЛЬ: Инициализирует область выбора и списка предложений для определенного слова, если это - не в словаре.

ВОЗВРАТ: Если список инициализирован, обратная величина является ИСТИНОЙ. Если ошибка происходит или the

слово - в словаре, обратная величина ЛОЖНАЯ.

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

BOOL PASCAL InitSpellList(HWND hwndCombo, LPSTR lpszWord)
{
int min = 0; /* начало дипазона поиска */ int max = cWords; /* конец дипазона поиска */ int n; /* индекс слова */ int cmp; /* результат сравнения */ символ ch; /* первый символ в слове */


ch = *lpszWord;
CharLowerBuff(&ch, 1);

/*
* Выполните двоичный поиск слова.
*
* Глобальный массив paLpDict содержит указатели в слово
* в глобальном массиве lpstrDict. Эти две переменных
* инициализированное функцией OpenDictionary.
*/

n = max / 2;
пока (min < max) { cmp = lstrcmpi(lpszWord, paLpDict[n]);
если (cmp == 0)
обратная ЛОЖЬ; /* не написанное с орфографическими ошибками */


если (cmp < 0) n max =;
еще min = n + 1;
n = (min + max) / 2;
}

/* Слово Списка, начинаемые с того же письма как lpszWord. */

SendMessage(hwndCombo, CB_RESETCONTENT, 0, 0);
пока (n > 0 && *paLpDict[n - 1] == ch) n--;
пока (*paLpDict[n] == ch) SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) paLpDict[n++]);

/* Установите слово на выборе field. */


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

возвращайтесь ВЕРНО;
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz