BOOL CXTPRibbonControlTab::OnHookKeyDown(UINT nChar, LPARAM /*lParam*/) { if (!IsFocused()) return FALSE; UINT nCharLayout(nChar); CXTPDrawHelpers::KeyToLayout(m_pParent, nCharLayout); if (nCharLayout == VK_UP || nCharLayout == VK_DOWN || nCharLayout == VK_LEFT || nCharLayout == VK_RIGHT) { m_pParent->HideKeyboardTips(); } if (nCharLayout == VK_LEFT && FindNextFocusable(GetCurSel(), -1)) { if (PerformKeyDown(m_pParent->GetSafeHwnd(), nChar)) return TRUE; } if (nCharLayout == VK_RIGHT && FindNextFocusable(GetCurSel(), +1)) { if (PerformKeyDown(m_pParent->GetSafeHwnd(), nChar)) return TRUE; } if (nCharLayout == VK_DOWN) { m_pParent->SetSelected(m_pControls->GetNext(CXTPControl::GetIndex(), +1), TRUE_KEYBOARD_NEXT); return TRUE; } if (nCharLayout == VK_RETURN || nCharLayout == VK_SPACE && GetRibbonBar()->IsRibbonMinimized()) { ShowPopupBar(TRUE); return TRUE; } return FALSE; }
void CXTPRibbonControlTab::SetFocused(BOOL bFocused) { if (m_bFocused == bFocused) return; m_bFocused = bFocused; if (m_bFocused && GetSelectedItem() == NULL) { SetSelectedItem(FindNextFocusable(-1, +1)); } RedrawParent(); }
BOOL CXTPTabManager::PerformKeyDown(HWND hWnd, UINT nChar) { const int nCount = GetItemCount(); if (nCount < 1) return FALSE; if (nChar == VK_LEFT && (DWORD)GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_LAYOUTRTL) nChar = VK_RIGHT; else if (nChar == VK_RIGHT && (DWORD)GetWindowLong(hWnd, GWL_EXSTYLE) & WS_EX_LAYOUTRTL) nChar = VK_LEFT; switch (nChar) { case VK_HOME: SetFocusedItem(FindNextFocusable(-1, +1)); return TRUE; case VK_END: SetFocusedItem(FindNextFocusable(nCount, -1)); return TRUE; case VK_LEFT: if (IsHorizontalPosition() && m_pSelected && m_pSelected->GetIndex() > 0) SetFocusedItem(FindNextFocusable(m_pSelected->GetIndex(), -1)); return TRUE; case VK_UP: if (!IsHorizontalPosition() && m_pSelected && m_pSelected->GetIndex() > 0) SetFocusedItem(FindNextFocusable(m_pSelected->GetIndex(), -1)); return TRUE; case VK_RIGHT: if (IsHorizontalPosition() && m_pSelected && m_pSelected->GetIndex() < nCount - 1) SetFocusedItem(FindNextFocusable(m_pSelected->GetIndex(), + 1)); return TRUE; case VK_DOWN: if (!IsHorizontalPosition() && m_pSelected && m_pSelected->GetIndex() < nCount - 1) SetFocusedItem(FindNextFocusable(m_pSelected->GetIndex(), + 1)); return TRUE; } return FALSE; }