void COptionTreeList::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) { // Declare variables COptionTreeItem* otiItem; CRect rcClient; // Get client rectangle GetClientRect(rcClient); // Validate option if (m_otOption == NULL) { CWnd::OnKeyDown(nChar, nRepCnt, nFlags); return; } // See if disabled if (m_otOption->IsDisableInput() || !m_otOption->IsWindowEnabled()) { CWnd::OnKeyDown(nChar, nRepCnt, nFlags); return; } otiItem = m_otOption->GetFocusedItem(); BOOL bWasActivated = FALSE; if (NULL != otiItem && otiItem->IsActivated()) { bWasActivated=TRUE; } switch (nChar) { case VK_TAB: // -- Shift if (GetKeyState(VK_SHIFT) < 0) { // -- -- Focus next otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL && !otiItem->IsRootLevel()) { m_otOption->FocusPrev(); } // -- -- Activate otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL && !otiItem->IsRootLevel() && !otiItem->IsReadOnly()) { otiItem->Activate(); } Invalidate(); UpdateWindow(); } // -- No shift else { // -- -- Focus next otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL && !otiItem->IsRootLevel()) { m_otOption->FocusNext(); } // -- -- Activate otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL && !otiItem->IsRootLevel() && !otiItem->IsReadOnly()) { otiItem->Activate(); } Invalidate(); UpdateWindow(); } break; case VK_RETURN: // -- Activate otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL && !otiItem->IsRootLevel() && !otiItem->IsReadOnly()) { otiItem->Activate(); } break; case VK_HOME: // -- Focus on first item if (m_otOption->FocusFirst()) { Invalidate(); UpdateWindow(); } break; case VK_END: // -- Focus on last item if (m_otOption->FocusLast()) { Invalidate(); UpdateWindow(); } break; case VK_LEFT: // -- Get focused item otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL) { // -- -- Send notify to user if (!m_otOption->SendNotify(OT_NOTIFY_ITEMEXPANDING, otiItem)) { // -- -- -- Validate if (otiItem->GetChild() && otiItem->IsExpanded()) { // -- Expand otiItem->Expand(FALSE); // -- Update resize UpdateResize(); // -- Force redraw Invalidate(); // -- Update window UpdateWindow(); // -- Check visible CheckVisibleFocus(); break; } } } else break; /** Modified By RuralMouse case VK_UP: // -- Move focus up if (m_otOption->FocusPrev()) { Invalidate(); UpdateWindow(); } break; */ case VK_UP: // -- Move focus up if (m_otOption->FocusPrev()) { // -- Restore activation if the previously focused item used to be activated. otiItem = m_otOption->GetFocusedItem(); if (bWasActivated && NULL != otiItem) { otiItem->Activate(); } Invalidate(); UpdateWindow(); } break; case VK_RIGHT: // -- Get focused item otiItem = m_otOption->GetFocusedItem(); if (otiItem != NULL) { // -- -- Send notify to user if (!m_otOption->SendNotify(OT_NOTIFY_ITEMEXPANDING, otiItem)) { // -- -- -- Validate if (otiItem->GetChild() && !otiItem->IsExpanded()) { // -- -- -- -- Expand otiItem->Expand(TRUE); // -- -- -- -- Update resize UpdateResize(); // -- -- -- -- Force redraw Invalidate(); // -- -- -- -- Update window UpdateWindow(); // -- -- -- -- Check visible CheckVisibleFocus(); break; } } } else break; /** Modified By RuralMouse case VK_DOWN: // -- Move focus down if (m_otOption->FocusNext()) { Invalidate(); UpdateWindow(); } break; */ case VK_DOWN: // -- Move focus down if (m_otOption->FocusNext()) { // -- Restore activation if the previously focused item used to be activated. otiItem = m_otOption->GetFocusedItem(); if (bWasActivated && NULL != otiItem) { otiItem->Activate(); } Invalidate(); UpdateWindow(); } break; } CWnd::OnKeyDown(nChar, nRepCnt, nFlags); }