|
|
|
Очистка буфера клавиатуры
|
|||
|---|---|---|---|
|
#18+
Пишу на С++, VS.Net, Win32 API Решил в дополнение к пунктам меню, которые отвечают за выполнение операций открытия, создание нового, сохранения файлов... добавить возможность делать это с помощью Ctrl+O, Ctrl+N, Ctrl+S... Для этого использую SetWindowsHookEx() и процедуру обработки перехваченных нажатий клавиш Вот кусок из процедуры для сохранения case 0x53: //клавиша S { //проверяем нажата ли в этот момент Ctrl if((GetAsyncKeyState(VK_CONTROL) & 0x8000)) //если да то посылаем сообщение SendMessage(g_hWnd, WM_COMMAND, (WPARAM) IDM_FILE_SAVE, (LPARAM) 0); } break; Проблема в том, что на главном окне программы есть Edit контрол который должен получать фокус ввода сразу после выполнения вышеперечисленных действий и вот, после выполнения например, сохранения, (Ctrl+S) в этом контроле появляется буква S (ну и соответственно N или O при других действиях) Я так понимаю что после перехвата сообщения и выполнения необходимых мне действий нужно очистить буфер клавиатуры, но что-то не могу найти соответствующую Win32 API ф-цию Может кто нибудь помочь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 13:42 |
|
||
|
Очистка буфера клавиатуры
|
|||
|---|---|---|---|
|
#18+
А не проще ли для решения исходной задачи использовать акселераторы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 13:51 |
|
||
|
Очистка буфера клавиатуры
|
|||
|---|---|---|---|
|
#18+
Ой ВэйА не проще ли для решения исходной задачи использовать акселераторы? да с акселераторами у меня какие-то непонятные глюки буквально через раз не срабатывают, правда помогает переключение на какое-нибудь другое окно другой программы и возврат назад, но ведь это же не дело я уже и не знаю где копать, потому и решил использовать Hook ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 14:57 |
|
||
|
Очистка буфера клавиатуры
|
|||
|---|---|---|---|
|
#18+
Это ж как надо программку заглючить, чтобы акселераторы не вообще не работали, а через раз ! Там же делать нечего, вставляешь LoadAccellerators() до цикла обработки сообщений, и в него - TranslateMessage() до DispatchMessage(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 16:53 |
|
||
|
Очистка буфера клавиатуры
|
|||
|---|---|---|---|
|
#18+
MasterZivЭто ж как надо программку заглючить, чтобы акселераторы не вообще не работали, а через раз ! Там же делать нечего, вставляешь LoadAccellerators() до цикла обработки сообщений, и в него - TranslateMessage() до DispatchMessage(). Это у меня в _tWinMain() ... hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_INKASBAG); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) { TranslateMessage(&msg); DispatchMessage(&msg); } }//while (GetMessage(&msg, NULL, 0, 0)) ... причем сгенерирован этот кусок самим VS.Net при создании нового проекта (я тут ничего не менял) и сразу в таблице акселераторов вставлено ID Modifier Key Type IDM_ABOUT Alt ? ASCII так вот, даже этот акселератор срабатывает через раз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.06.2005, 17:14 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=402&tid=2033168]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
4ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
| others: | 241ms |
| total: | 385ms |

| 0 / 0 |
