Страница 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