Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.59.187] |
|
Сообщ.
#1
,
|
|
|
Решил в программе (диалоговая форма) сделать некоторые хоткеи.
Приделал акселераторы (LoadAccelerators, TranslateAccelerator). Акселераторы работают как надо. Но, если фокус ввода стоит например на элементе BUTTON - то раздаётся звук ошибки (хотя акселератор срабатывает нормально). Если фокус ввода стоит на EDIT - тишина. Как бороться с этим явлением? Насколько понял, система издаёт звук ошибки при любом нажатии в окне не обрабатываемых окном кнопок. Как сделать чтобы этих звуков не было? |
Сообщ.
#2
,
|
|
|
Цитата f2065 @ Но, если фокус ввода стоит например на элементе BUTTON - то раздаётся звук ошибки (хотя акселератор срабатывает нормально). Пальцем в небо: ты вызываешь TranslateMessage безусловно, в независимости от результата от TranslateAccelerator? |
Сообщ.
#3
,
|
|
|
Цитата B.V. @ ты вызываешь TranslateMessage безусловно, в независимости от результата от TranslateAccelerator? Делаю как сказано в примере на сайте microsoft while (GetMessage(&msg, 0, 0, 0)) { if (!TranslateAccelerator(hMainWindow, hAccel, &msg) && !IsDialogMessage(hdlg, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } } |
Сообщ.
#4
,
|
|
|
f2065, можно попробовать несколько способов.
Скрытый текст у меня были похожие проблемы с Edit-ами 1.Самый простой и тупой - запретить фокус на контролы, издающие мерзкий писк. Будем переносить фокус на всю панель, на которой они расположены. Но тогда нажимать на такие контролы можно будет только мышью. 2. Решенние в общем случае - делаем саб-классинг. Заменим оригинальную оконную процедуру контрола на свою. При этом адрес и возможность вызвать оригинальную оконную процедуру (ОП) остаётся. Без неё никак - она не только издаёт писк, она ещё и сам контрол отрисовывает итд итп. В итоге получим возможность - сделать что-то до вызова ОП, затем вызвать ОП, далее вызвать свою процедуру после ОП. В данном случае в собственной процедуре до вызова ОП отфильтруем нажатия нежелательных клавиш. В этом случае не будем далее вызывать ОП. Мерзкий писк исчезнет. |