// 获取当前焦点控件 CControlBase* CControlBase::GetFocusControl(CControlBase* pFocusControl) { for (int i = m_vecControl.size()-1; i >= 0; i--) { CControlBase* pControlBase = m_vecControl.at(i); if (pControlBase && pControlBase->GetVisible() && !pControlBase->GetDisable() && (pControlBase == pFocusControl) && pControlBase->IsTabStop()) { return pControlBase; }else if (pControlBase && (pControlBase == m_pControl)) { // 查找子控件 pControlBase = pControlBase->GetFocusControl(pFocusControl); if(pControlBase != NULL) { return pControlBase; } } } return NULL; }
// 获取下一个可以获取焦点的子控件 CControlBase* CControlBase::GetNextFocusableControl(CControlBase* pFocusControl) { BOOL bStartSearch = FALSE; // 先按照焦点控件查找一次 for (int i = 0; i < m_vecControl.size(); i++) { CControlBase* pControlBase = m_vecControl.at(i); if (pControlBase && pControlBase->GetVisible() && !pControlBase->GetDisable() && bStartSearch && pControlBase->IsTabStop()) { return pControlBase; }else if (pControlBase && (pControlBase == pFocusControl)) { bStartSearch = TRUE; } } // 再遍历子控件查找 if(m_pControl == NULL) { bStartSearch = TRUE; } for (int i = 0; i < m_vecControl.size(); i++) { CControlBase* pControlBase = m_vecControl.at(i); if(m_pControl == NULL) { m_pControl = pControlBase; } if (pControlBase && pControlBase->GetVisible() && !pControlBase->GetDisable() && bStartSearch && pControlBase->IsTabStop()) { return pControlBase; }else if (pControlBase && (pControlBase == m_pControl)) { // 查找子控件 pControlBase = pControlBase->GetNextFocusableControl(pFocusControl); if(pControlBase != NULL) { return pControlBase; } } } return NULL; }
// 获取上一个可以获取焦点的子控件 CControlBase* CDlgPopup::GetPrevFocusableControl() { BOOL bStartSearch = FALSE; // 先按照焦点控件查找一次 for (int i = m_vecControl.size()-1; i >= 0; i--) { CControlBase* pControlBase = m_vecControl.at(i); if (pControlBase && pControlBase->GetVisible() && !pControlBase->GetDisable() && bStartSearch && pControlBase->IsTabStop()) { return pControlBase; }else if (pControlBase && (pControlBase == m_pFocusControl)) { bStartSearch = TRUE; } } // 再遍历子控件查找 if(m_pFocusControl == NULL) { bStartSearch = TRUE; } for (int i = m_vecControl.size()-1; i >= 0; i--) { CControlBase* pControlBase = m_vecControl.at(i); if(m_pControl == NULL) { m_pControl = pControlBase; } if (pControlBase && pControlBase->GetVisible() && !pControlBase->GetDisable() && bStartSearch && pControlBase->IsTabStop()) { return pControlBase; }else if (pControlBase && (pControlBase == m_pControl)) { // 查找子控件 pControlBase = pControlBase->GetPrevFocusableControl(m_pFocusControl); if(pControlBase != NULL) { return pControlBase; } //bStartSearch = TRUE; } } return NULL; }