немодальный диалог в контроле
От:
Аноним
Дата: 25.02.03 09:35
Оценка:
Как обработать клавиатуру в _немодальном_ диалоге(WTL) в _контроле_, написанном на ATL,
точнее как добраться до очереди сообщений? Стандартный WTL-ный прием:
_Module.GetMessageLoop()->AddMessageFilter(this);
здесь, естественно, не работает ...
Заранее благодарен
Владимир
Re: немодальный диалог в контроле
От:
lboss
Дата: 07.03.03 07:57
Оценка:
Здравствуйте, Аноним, Вы писали:
А>Как обработать клавиатуру в _немодальном_ диалоге(WTL) в _контроле_
Безотносительно к WTL проще поюзать SetWindowsHookEx(WH_KEYBOARD, keyboardFilterProc, NULL, GetCurrentThreadId());
И
LRESULT CALLBACK GUIManager::keyboardFilterProc(int code, WPARAM wParam, LPARAM lParam)
{
switch (code)
{
case HC_ACTION:
{
MSG msg;
msg.message = (lParam & 0x80000000L) ? WM_KEYUP : WM_KEYDOWN;
msg.hwnd = ::GetFocus();
msg.wParam = wParam;
msg.lParam = lParam;
GetCursorPos(&msg.pt);
msg.time = 0;
for(всех окон)
{
HWND hWnd = *p;
if(IsWindowEnabled(hWnd) && !GetProp(hWnd, IsPymbleTmp))
{
SetProp(hWnd, IsPymbleTmp, (HANDLE)1);
BOOL bRet = IsDialogMessage(hWnd, &msg);
SetProp(hWnd, IsPymbleTmp, (HANDLE)0);
if(bRet)
return (LRESULT)TRUE;
}
}
}
break;
}
return ::CallNextHookEx(m_instance->m_hKeyboardFilterHook, code, wParam, lParam);
}
С уважением Вадим.
Автомодерирование Close
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить
Добавить в избранное Close