Класс CHtmlView и фокус - PullRequest
       45

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

0 голосов
/ 30 марта 2010

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

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

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

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

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

Цените ваше время.

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

1 Ответ

1 голос
/ 31 марта 2010

Попробуйте перегрузить 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);
}
...