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; } 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; case VK_UP: // -- Move focus up if (m_otOption->FocusPrev()) { 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; case VK_DOWN: // -- Move focus down if (m_otOption->FocusNext()) { Invalidate(); UpdateWindow(); } break; } CWnd::OnKeyDown(nChar, nRepCnt, nFlags); }
void COptionTreeList::OnLButtonDown(UINT nFlags, CPoint point) { // Validate option if (m_otOption == NULL) { CWnd::OnLButtonDown(nFlags, point); return; } // See if disabled if (m_otOption->IsDisableInput() || !m_otOption->IsWindowEnabled()) { CWnd::OnLButtonDown(nFlags, point); return; } // Send notify to user m_otOption->SendNotify(NM_CLICK); // Declare variables long lHit; COptionTreeItem *otiItem; COptionTreeItem *oliOldFocus; CRect rcClient; // Get client rectangle GetClientRect(rcClient); // Set focus to window SetFocus(); // Hit test lHit = m_otOption->HitTest(point); switch (lHit) { case OT_HIT_COLUMN: if (m_otOption->SendNotify(OT_NOTIFY_COLUMNCLICK)) { break; } // -- Set capture m_bColDrag = TRUE; SetCapture(); m_lColumn = m_otOption->GetOrigin().x; // -- Force redraw Invalidate(); // -- Update window UpdateWindow(); break; case OT_HIT_EXPAND: if ((otiItem = m_otOption->FindItem(point)) != NULL) { if (otiItem->GetChild() && !m_otOption->SendNotify(OT_NOTIFY_ITEMEXPANDING, otiItem)) { // -- Expand otiItem->Expand(!otiItem->IsExpanded()); // -- Update resize UpdateResize(); // -- Force redraw Invalidate(); // -- Update window UpdateWindow(); // -- Check visible CheckVisibleFocus(); } } break; default: if ((otiItem = m_otOption->FindItem(point)) != NULL) { // -- Get old focus oliOldFocus = m_otOption->GetFocusedItem(); // -- Select items m_otOption->SelectItems(NULL, FALSE); // -- Select otiItem->Select(); // -- Make sure new item if (otiItem != oliOldFocus) { m_otOption->SendNotify(OT_NOTIFY_SELCHANGE, otiItem); } // -- Send notify if (lHit == OT_HIT_ATTRIBUTE && !otiItem->IsRootLevel()) { if (!m_otOption->SendNotify(OT_NOTIFY_PROPCLICK, otiItem) && !otiItem->IsReadOnly()) { otiItem->Activate(); } } // -- Set focus item m_otOption->SetFocusedItem(otiItem); // -- Force redraw Invalidate(); // -- Update window UpdateWindow(); } else { // -- Select items m_otOption->SelectItems(NULL, FALSE); // -- Set focus item m_otOption->SetFocusedItem(NULL); // -- Send notify m_otOption->SendNotify(OT_NOTIFY_SELCHANGE); // -- Force redraw Invalidate(); // -- Update window UpdateWindow(); } break; } CWnd::OnLButtonDown(nFlags, point); }