Re: Переключение Фокуса
От: zitz  
Дата: 30.03.10 05:40
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Имею небольшую проблему:


А>Есть диалог в котором расположены несколько контролов.

А>Контролы создаются на куче в OnCreate().
А>Не работало переключение фокуса по нажатию клавиши Tab.
А>Я занялся извращением и переопределил метод PreTranslateMessage(), в котором по нажатию клавиши Tab переключал фокус вручную путем m_pControl->SetFocus();

А>Но тут появилась вторая проблема — фокус переключается, но не отрисовывается FocusRect (Рамочка фокуса). Использовать DrawFocusRect() не предлагать. Я конечно извращенец, но не до такой же степени.


А>Помогите пожалуйста с этим болотом под названием MFC


BOOL CDlgXXX::PreTranslateMessage( MSG* pMsg )
{
if ( WM_KEYDOWN == pMsg->message || WM_SYSKEYDOWN == pMsg->message )
{
BOOL isShift = GetAsyncKeyState( VK_SHIFT ) < 0;
BOOL isCtrl = GetAsyncKeyState( VK_CONTROL ) < 0;
BOOL isAlt = GetAsyncKeyState( VK_MENU ) < 0;
if ( pMsg->wParam == VK_TAB && !isCtrl && !isAlt && !isShift )
{
CDialog* pParent = (CDialog*)GetParent();
if ( pParent != NULL )
{
if ( m_hWndNextTab != NULL )
{
pParent->PostMessage( WM_NEXTDLGCTL, (WPARAM)m_hWndNextTab, TRUE );
return TRUE;
}
}
}
else if ( pMsg->wParam == VK_TAB && !isCtrl && !isAlt && isShift )
{
CDialog* pParent = (CDialog*)GetParent();
if ( pParent != NULL )
{
if ( m_hWndPrevTab != NULL )
{
pParent->PostMessage( WM_NEXTDLGCTL, (WPARAM)m_hWndPrevTab, TRUE );
return TRUE;
}
}
}
}
return CButton::PreTranslateMessage( pMsg );
}
... << RSDN@Home 1.2.0 alpha rev. 786>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.