Класс CHtmlView и фокус

У меня есть приложение SDI, написанное в MFC. Кадр делится на 1 строку и 2 столбца с помощью окна-разделителя. Ниже приведены сведения о строке и столбце (R0C0 означает строку № 0 и столбец № 0).

  1. Представление R0C0 — это CFormView с несколькими элементами управления вводом, такими как текстовое поле, поле со списком и т. д.
  2. Представление R0C1 — это CHtmlView, который содержит содержимое HTML, относящееся к элементу управления, который имеет фокус ввода в R0C0.

Я могу обновлять содержимое HTML, а также вызывать функции Javascript через свой код MFC.

Проблема: когда пользователь нажимает на R0C1, содержащий CHtmlView, фокус теперь находится на html-странице. Я хочу, чтобы пользователь мог выйти из R0C1 с помощью клавиатуры и вернуться к R0C0. Можете ли вы помочь с этим, пожалуйста? Очевидно, что пользователь может щелкнуть представление R0C0 с помощью мыши, но у нас есть пользователь, которому необходимо использовать клавиатуру для использования этой функции.

Дайте мне знать, если вопрос недостаточно описательный, и я упрощу его еще больше.

Цените свое время.

Спасибо, Байт


person byte    schedule 30.03.2010    source источник


Ответы (1)


Попробуйте перегрузить CHtmlView::OnTranslateAccelerator. Я успешно использовал этот трюк, чтобы отключить обновление с помощью клавиши F5. Получите свой собственный класс от CHtmlView и перегрузите

virtual HRESULT OnTranslateAccelerator(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID);

нравится:

HRESULT CMyHtmlView::OnTranslateAccelerator(LPMSG lpMsg, const GUID* pguidCmdGroup, DWORD nCmdID)
{
    if(lpMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_TAB) != 0 )
    {
        // change focus
        return S_OK;
    } 
    return CHtmlView::OnTranslateAccelerator( lpMsg, pguidCmdGroup, nCmdID);
}
person FKDev    schedule 31.03.2010
comment
FenchKiss Dev, спасибо за ответ. Я посмотрю, как я могу использовать ваш метод в контексте моего приложения. В настоящее время я использую другой метод. Я прикрепил свой производный класс CHtmlView в качестве приемника событий для HTMLDocumentEvents2. Таким образом, я получаю событие click, focus и т. д. для каждого элемента в документе. Когда фокус достигает определенного элемента на странице, я устанавливаю фокус на другое представление. Спасибо - person byte; 01.04.2010