Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как поймать нажатие клавиши в Edit?


Автор: Тутанхамец 23.1.2006, 18:50
У меня есть диалоговое окно. Там есть созданное через CreateWindow текстовое поле. Надо бы, чтоб когда я нажимаю "стрелку вправо" фокус переходил на другое текстовое поле. Про TAB_STOP знаю. Вопрос, как поймать нажатие клавиши для Edit?

case WM_CHAR в процедуре диалогового окна не работает.

Есть что-нибудь проще, чем задание процедуры окна с помощью SetWindowLong?

Автор: Fixin 23.1.2006, 19:01
Проще - не знаю, но ты не то сообщение ловил. Надо WM_KEYDOWN или WM_KEYUP.

ЗЫ: НЕхорошо так делать (елси в едите вводится не один символ) надо же редактировать введенное, а мышкой не всегда удобно.

Автор: Fixin 23.1.2006, 19:18
Ну и примерчик, как полагается с отсутствием буквы "а" в расширении smile

Автор: Тутанхамец 23.1.2006, 19:47
Опять спасибо smile

Там вводится как раз один символ - либо 1, либо 0. У меня массив из 32-ъ эдитов, которые изображают разрядную сетку для числа float. smile

Автор: Fixin 23.1.2006, 20:29
тогда лучше сделать переход сразу после введения символа

Автор: Тутанхамец 24.1.2006, 09:24
Слушай, вот ты в примере делаешь такую штуку:


Код

void TP_OnDestroy(HWND hwnd)
{
    SubclassWindow(GetDlgItem(hwnd, ID_EDIT1), OldEditProc);
    SubclassWindow(GetDlgItem(hwnd, ID_EDIT2), OldEditProc);
    PostQuitMessage(0);
}


А что будет, если не вернуть в класс старую процедуру?

Автор: Fixin 24.1.2006, 14:52
Да ничего. В принципе, это пережиток вин16, где все было общее (полный социализьм), вот там могли быть глюки, что ты закрыл свою прожку, а поведение субласенного контрола появилось в другом приложении. (правда я сам такого не видел). А теперь, этим делом может заняться система (виндовса).

Еще есть вариант, что в твоем приложении несколько ОКОН (а не диалогов), и в них ты субкласишь элементы управления, при закрытии одного окна, процесс продолжает существовать, и может оказаться что осталась и выделенная память под ту процедуру, на которую ты заменял стандартную, и при жестких требованиях к экономии памяти это может вызвть недовольство. (Пару раз окошко открыл - закрыл, а памяти - тю-тю)

Автор: Тутанхамец 25.1.2006, 08:48
Ясно. На всякий случай буду возвращать процедуру на место.)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)