врёт GetAsyncKeyState
От: nhie  
Дата: 07.09.06 05:16
Оценка:
Win2000, MSVC6, MFC (но проблема с апишной функцией)
Получаю состояние VK_RBUTTON в обработчике OnMouseMove, и сталкиваюсь с такой проблемой, что GetAsyncKeyState иногда говорит, что кнопка нажата в то время, как она не нажата. Интересно, что при повторном вызове GetAsyncKeyState всё правильно (так я и решил проблему).
Сейчас с такой же проблемой столкнулся, получая состояние VK_SHIFT в OnKeyDown. Это происходит после того, как я вызываю другой диалог изнутри OnKeyDown, там жму Shift и отпускаю, после чего закрываю диалог и обрабатываю следующее нажатие клавиш в том же OnKeyDown. Абсолютно то же самое — первый раз GetAsyncKeyState говорит, что Shift нажат, второй раз говорит правду.
Не сталкивался ли кто-нибудь с подобной проблемой? Мне, в принципе, несложно два раза позвать GetAsyncKeyState, но интересно же, в чём всё-таки дело
Re: врёт GetAsyncKeyState
От: sraider http://dvinogradov.blogspot.com
Дата: 07.09.06 07:25
Оценка:
Здравствуйте, nhie, Вы писали:

N>Win2000, MSVC6, MFC (но проблема с апишной функцией)

N>Получаю состояние VK_RBUTTON в обработчике OnMouseMove, и сталкиваюсь с такой проблемой, что GetAsyncKeyState иногда говорит, что кнопка нажата в то время, как она не нажата. Интересно, что при повторном вызове GetAsyncKeyState всё правильно (так я и решил проблему).
N>Сейчас с такой же проблемой столкнулся, получая состояние VK_SHIFT в OnKeyDown. Это происходит после того, как я вызываю другой диалог изнутри OnKeyDown, там жму Shift и отпускаю, после чего закрываю диалог и обрабатываю следующее нажатие клавиш в том же OnKeyDown. Абсолютно то же самое — первый раз GetAsyncKeyState говорит, что Shift нажат, второй раз говорит правду.
N>Не сталкивался ли кто-нибудь с подобной проблемой? Мне, в принципе, несложно два раза позвать GetAsyncKeyState, но интересно же, в чём всё-таки дело

Если нужно получить состояние клавиши при обработке сообщения — лучше используй GetKeyState, она тебе даст состояние клавиши именно на момент генерации события.
Re: врёт GetAsyncKeyState
От: apple-antonovka  
Дата: 07.09.06 07:33
Оценка: +1
Здравствуйте, nhie, Вы писали:

N>Win2000, MSVC6, MFC (но проблема с апишной функцией)

N>Получаю состояние VK_RBUTTON в обработчике OnMouseMove, и сталкиваюсь с такой проблемой, что GetAsyncKeyState иногда говорит, что кнопка нажата в то время, как она не нажата. Интересно, что при повторном вызове GetAsyncKeyState всё правильно (так я и решил проблему).
N>Сейчас с такой же проблемой столкнулся, получая состояние VK_SHIFT в OnKeyDown. Это происходит после того, как я вызываю другой диалог изнутри OnKeyDown, там жму Shift и отпускаю, после чего закрываю диалог и обрабатываю следующее нажатие клавиш в том же OnKeyDown. Абсолютно то же самое — первый раз GetAsyncKeyState говорит, что Shift нажат, второй раз говорит правду.
N>Не сталкивался ли кто-нибудь с подобной проблемой? Мне, в принципе, несложно два раза позвать GetAsyncKeyState, но интересно же, в чём всё-таки дело
А как GetAsyncKeyState используется? Случайно не вот так:
if (GetAsyncKeyState(VK_SHIFT)) blablabla; ?
Надо:
if (GetAsyncKeyState(VK_SHIFT)&32768) blablabla;
Re[2]: врёт GetAsyncKeyState
От: nhie  
Дата: 07.09.06 08:24
Оценка:
AA>А как GetAsyncKeyState используется? Случайно не вот так:
AA>if (GetAsyncKeyState(VK_SHIFT)) blablabla; ?
AA>Надо:
AA>if (GetAsyncKeyState(VK_SHIFT)&32768) blablabla;

Спасибо, это оно и есть.
Каюсь, не разобрался, GetAsyncKeyState хороший
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.