Отлов акселераторов типа Ctrl+A
От: g0blin  
Дата: 29.11.03 23:24
Оценка:
Вот как я решил данную проблему :

BOOL CUOLoopPlusDlg::PreTranslateMessage(MSG* pMsg)
{
static bool bCtrl = false;

if (pMsg->wParam == VK_CONTROL && pMsg->message == WM_KEYDOWN)
bCtrl = true;
if (pMsg->wParam == VK_CONTROL && pMsg->message == WM_KEYUP)
bCtrl = false;

if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == 0x41 && bCtrl)
{
return ::TranslateAccelerator(m_hWnd, m_Accel, pMsg);
}
}
return CDialog::PreTranslateMessage(pMsg);
}

Есть ли более оптимальный способ так как не нравится использование статических флагов... да и интересно в принципе....
WBR g0blin [RSDN@Home 1.1.2 beta 1][OD.UA.GH]
Re: Отлов акселераторов типа Ctrl+A
От: Alexey Goncharov Россия  
Дата: 03.12.03 15:51
Оценка:
Здравствуйте, g0blin, Вы писали:

Можно вот так :

G>BOOL CUOLoopPlusDlg::PreTranslateMessage(MSG* pMsg) 
G>{
      bool bCtrl = ( ::GetKeyState( VK_CONTROL ) < 0 ) ;

G>    if (pMsg->message == WM_KEYDOWN)
G>    {
G>        if (pMsg->wParam == 0x41 && bCtrl)
G>        {
G>            return ::TranslateAccelerator(m_hWnd, m_Accel, pMsg); 
G>        }
G>    }
G>    return CDialog::PreTranslateMessage(pMsg);
G>}

Вместо GetState можно использовать GetAsyncKeyState
Re[2]: Отлов акселераторов типа Ctrl+A
От: Alexey Goncharov Россия  
Дата: 03.12.03 15:53
Оценка:
AG>Вместо GetState можно использовать GetAsyncKeyState
Ну в смысле вместо GetKeyState можно использовать GetAsyncKeyState
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.