// Обработка нажатия клавиши
if (msg.message == WM_KEYDOWN)
{
TCHAR szText[MAX_PATH] = {0};
szText[0] = msg.wParam;
if (IsCharUpper(msg.wParam))
_tcscat_s(szText,MAX_PATH,_T("- заглавная буква"));
else
if (IsCharLower(msg.wParam))
_tcscat_s(szText,MAX_PATH,_T("- строчная буква"));
else
_tcscat_s(szText,MAX_PATH,_T("- не буква"));
if (IsCharAlpha(msg.wParam))
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)szText);
else
SendDlgItemMessage(hwnd, ID_LISTBOX2, LB_ADDSTRING, 0, (LPARAM)szText);
}
// Конец событий обработки нажатия клавиши
Определения введёных символов в edit и запись их в listbox-ы
Код:
Этот код вставлен в цикл обработки сообщений
И у меня этот код работает не правельно:
1. Как переделать код чтобы он ловил символы, только тогда когда я действительно их ввёл в edit.
(в этом коде символы к сожалению всегда ловятся, даже когда я нажимаю на кнопку, а курсор не стоит в поле ввода)
2. Не правельно обробатываются комбинации. Например символ ^ я ввожу. Он вводится нажатием Shift+6, а в результате в listbox2 записывается не
^ - не буква, а так - не буква
6 - не буква
Как это поправить.
Сделал так
Код:
// Поле для ввода строки
case ID_EDIT1:
if (HIWORD(wparam) == EN_CHANGE)
{
TCHAR szText[MAX_PATH] = {0};
szText[0] = wparam;
if (IsCharUpper(wparam))
_tcscat_s(szText,MAX_PATH,_T(" - заглавная буква"));
else
if (IsCharLower(wparam))
_tcscat_s(szText,MAX_PATH,_T(" - строчная буква"));
else
_tcscat_s(szText,MAX_PATH,_T(" - не буква"));
if (IsCharAlpha(wparam))
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)szText);
else
SendDlgItemMessage(hwnd, ID_LISTBOX2, LB_ADDSTRING, 0, (LPARAM)szText);
}
break;
case ID_EDIT1:
if (HIWORD(wparam) == EN_CHANGE)
{
TCHAR szText[MAX_PATH] = {0};
szText[0] = wparam;
if (IsCharUpper(wparam))
_tcscat_s(szText,MAX_PATH,_T(" - заглавная буква"));
else
if (IsCharLower(wparam))
_tcscat_s(szText,MAX_PATH,_T(" - строчная буква"));
else
_tcscat_s(szText,MAX_PATH,_T(" - не буква"));
if (IsCharAlpha(wparam))
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)szText);
else
SendDlgItemMessage(hwnd, ID_LISTBOX2, LB_ADDSTRING, 0, (LPARAM)szText);
}
break;
Но почему-то при вводе символа 'А' запись такая <здесь в место символа 'А' какой-то непонятный символ> - не буква и заносится в listbox2, а должна занасится в listbox1 и содержание записи должно быть такое А - заглавная буква.
Мне не принципиально как должны заполнятся данные во время ввода или после нажатия на кнопку.
Вот часть кода отвечающего за добавление нажатий клавишь в listbox-ы
Код:
// Кнопка "Счёт"
case ID_COUNT1:
GetDlgItemText(hwnd, ID_EDIT1, s, 256);
for (int i = 0; i < GetWindowTextLength(GetDlgItem(hwnd,ID_EDIT1)); i++)
{
symbols[0] = s;
if (IsCharUpper(symbols[0]))
lstrcat(symbols, L" - заглавная буква");
else
if (IsCharLower(symbols[0]))
lstrcat(symbols, L" - строчная буква");
else
lstrcat(symbols, L" - не буква");
if (IsCharAlpha(symbols[0]))
{
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)symbols);
memset(symbols, 0, sizeof(symbols));
}
else
{
SendDlgItemMessage(hwnd, ID_LISTBOX2, LB_ADDSTRING, 0, (LPARAM)symbols);
memset(symbols, 0, sizeof(symbols));
}
}
break;
case ID_COUNT1:
GetDlgItemText(hwnd, ID_EDIT1, s, 256);
for (int i = 0; i < GetWindowTextLength(GetDlgItem(hwnd,ID_EDIT1)); i++)
{
symbols[0] = s;
if (IsCharUpper(symbols[0]))
lstrcat(symbols, L" - заглавная буква");
else
if (IsCharLower(symbols[0]))
lstrcat(symbols, L" - строчная буква");
else
lstrcat(symbols, L" - не буква");
if (IsCharAlpha(symbols[0]))
{
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)symbols);
memset(symbols, 0, sizeof(symbols));
}
else
{
SendDlgItemMessage(hwnd, ID_LISTBOX2, LB_ADDSTRING, 0, (LPARAM)symbols);
memset(symbols, 0, sizeof(symbols));
}
}
break;
Если кто знает и как при вводе текста тоже самое сделать за пояснения буду только рад.
Всё вопрос решён, может конешно не идеально но работает.
1. Нужно акромя проверки символа делать еще и проверку хэндла самого edit, и делать все это только если они совпали.
2. Внимательно почитайте про сообщение WM_KEYDOWN, думаю все станет на свои места...
Цитата:
SendDlgItemMessage(hwnd, ID_LISTBOX1, LB_ADDSTRING, 0, (LPARAM)szText);
спасибо за строчку, я уж было отчаялся после 2 часов поиска)