| 590 | } |
| 591 | |
| 592 | CControlUI* CContainerUI::FindControl(FINDCONTROLPROC Proc, LPVOID pData, UINT uFlags) |
| 593 | { |
| 594 | // Check if this guy is valid |
| 595 | if( (uFlags & UIFIND_VISIBLE) != 0 && !IsVisible() ) return NULL; |
| 596 | if( (uFlags & UIFIND_ENABLED) != 0 && !IsEnabled() ) return NULL; |
| 597 | if( (uFlags & UIFIND_HITTEST) != 0 ) { |
| 598 | if( !::PtInRect(&m_rcItem, *(static_cast<LPPOINT>(pData))) ) return NULL; |
| 599 | if( !m_bMouseChildEnabled ) { |
| 600 | CControlUI* pResult = NULL; |
| 601 | if( m_pVerticalScrollBar != NULL ) pResult = m_pVerticalScrollBar->FindControl(Proc, pData, uFlags); |
| 602 | if( pResult == NULL && m_pHorizontalScrollBar != NULL ) pResult = m_pHorizontalScrollBar->FindControl(Proc, pData, uFlags); |
| 603 | if( pResult == NULL ) pResult = CControlUI::FindControl(Proc, pData, uFlags); |
| 604 | return pResult; |
| 605 | } |
| 606 | } |
| 607 | |
| 608 | CControlUI* pResult = NULL; |
| 609 | if( m_pVerticalScrollBar != NULL ) pResult = m_pVerticalScrollBar->FindControl(Proc, pData, uFlags); |
| 610 | if( pResult == NULL && m_pHorizontalScrollBar != NULL ) pResult = m_pHorizontalScrollBar->FindControl(Proc, pData, uFlags); |
| 611 | if( pResult != NULL ) return pResult; |
| 612 | |
| 613 | if( (uFlags & UIFIND_ME_FIRST) != 0 ) { |
| 614 | CControlUI* pControl = CControlUI::FindControl(Proc, pData, uFlags); |
| 615 | if( pControl != NULL ) return pControl; |
| 616 | } |
| 617 | RECT rc = m_rcItem; |
| 618 | rc.left += m_rcInset.left; |
| 619 | rc.top += m_rcInset.top; |
| 620 | rc.right -= m_rcInset.right; |
| 621 | rc.bottom -= m_rcInset.bottom; |
| 622 | if( m_pVerticalScrollBar && m_pVerticalScrollBar->IsVisible() ) rc.right -= m_pVerticalScrollBar->GetFixedWidth(); |
| 623 | if( m_pHorizontalScrollBar && m_pHorizontalScrollBar->IsVisible() ) rc.bottom -= m_pHorizontalScrollBar->GetFixedHeight(); |
| 624 | if( (uFlags & UIFIND_TOP_FIRST) != 0 ) { |
| 625 | for( int it = m_items.GetSize() - 1; it >= 0; it-- ) { |
| 626 | CControlUI* pControl = static_cast<CControlUI*>(m_items[it])->FindControl(Proc, pData, uFlags); |
| 627 | if( pControl != NULL ) { |
| 628 | if( (uFlags & UIFIND_HITTEST) != 0 && !pControl->IsFloat() && !::PtInRect(&rc, *(static_cast<LPPOINT>(pData))) ) |
| 629 | continue; |
| 630 | else |
| 631 | return pControl; |
| 632 | } |
| 633 | } |
| 634 | } |
| 635 | else { |
| 636 | for( int it = 0; it < m_items.GetSize(); it++ ) { |
| 637 | CControlUI* pControl = static_cast<CControlUI*>(m_items[it])->FindControl(Proc, pData, uFlags); |
| 638 | if( pControl != NULL ) { |
| 639 | if( (uFlags & UIFIND_HITTEST) != 0 && !pControl->IsFloat() && !::PtInRect(&rc, *(static_cast<LPPOINT>(pData))) ) |
| 640 | continue; |
| 641 | else |
| 642 | return pControl; |
| 643 | } |
| 644 | } |
| 645 | } |
| 646 | |
| 647 | if( pResult == NULL && (uFlags & UIFIND_ME_FIRST) == 0 ) pResult = CControlUI::FindControl(Proc, pData, uFlags); |
| 648 | return pResult; |
| 649 | } |
nothing calls this directly
no test coverage detected