Страница 2 из 3
Добавлено: 19 апр 2004, 15:30
AiK
Да, с отправкой почты какие-то проблемы непонятного происхождения

Добавлено: 19 апр 2004, 17:13
Andy
Кстати, а почему это всё субклассингом называется? Причём тут классы вообще?
В том смысле, что ты модифицируешь зарегистрированные классы окон типа "combobox".
Тут, думаю, можно сделать и попроще - через акселераторы например.
Хотя субклассинг - здесь "хороший тон" (видимо).
Добавлено: 20 апр 2004, 11:30
Romeo
Да именно "хороший тон". Тем более в Винде предусмотрена специальная функция для вызова старого обработчика, значит это - "классический" приём.
P.S. А при ответе на форуме действительно вылазят какие-то лаги. Aik - разберись

Добавлено: 20 апр 2004, 12:03
AiK
А при ответе на форуме действительно вылазят какие-то лаги
Эт вчера было. А сегодня ты ещё и не отвечал

Добавлено: 20 апр 2004, 18:37
Eugie
AiK, народ уже ответил на большую часть вопросов, так что я просто суммирую по пунктам:
1. Добавить обработку клавиатурных сообщений в оконную функцию.
Узнать, где фокус ввода: GetFocus()
2. Добавить обработчик - subclassing: пишешь свою процедуру, в которой обрабатываешь сообщения как тебе нужно, а все остальные посылаешь в старый обработчик через ф-цию CallWindowProc.
Дальше 2 варианта: либо регистрировать свой класс окна, либо подменять процедуру для конкретного окна.
Рекомендую 1-й:
- получить адрес старого обработчика: GetClassInfo(NULL, "COMBOBOX", &wndclass)
- установить новый:
Код: Выделить всё
wndclass.lpszClassName = "MYCOMBOBOX";
wndclass.lpfnWndProc = MyComboboxProc;
- зарегистрить свой локальный комбобокс: RegisterClass(&wndclass).
Насчет того, что Up и Down работают как Esc - непонятно. Если фокус в поле связанном editbox - должны двигать каретку вперед-назад, если в списке - прокручивать вверх-вниз.
3. ??? - BackSpace в комбо (точнее, в связанном editbox) работает как обычно. Уж его точно перегружать не надо
4. Кракозябры - здесь комбо не при чем. Ищи другую причину...
Добавлено: 20 апр 2004, 18:51
AiK
работает как обычно
А как обычно?

У меня он просто не работает. UP и Down работают как ESC, если в списке ничего нет, и начинают переходить на предыдущий/следующий элементы списка, если он не пуст.
Добавлено: 20 апр 2004, 19:06
Eugie
Как обычно - при нажатии на BackSpace удаляется символ перед кареткой

Почему у тебя не работает - это есть биг квесчон.
Насчет Up/Down - на пустом списке не проверял, а на непустом - все правильно. А если фокус в поле ввода, что происходит?
Добавлено: 21 апр 2004, 12:46
AiK
Кстати, ещё вопрос: как заставить этот COMBOBOX получить фокус при перемещении TAB'ом? Типа TABSTOP ему выставить. И, раз уж пошла такая пьянка, заодно как порядок обхода задаётся?
Добавлено: 21 апр 2004, 16:24
Romeo
Порядком расположения элементов диалога в rc файле

Добавлено: 21 апр 2004, 16:46
Eugie
Да, и задать среди прочих стиль WS_TABSTOP