|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
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); возвращайтесь ВЕРНО; }
|
|
|
|
| |