BOOL CDuiItemBox::SetNewPosition(CDuiWindow * pChild, DWORD nPos, BOOL bEnsureVisible) { if (pChild == NULL) { return FALSE; } CDuiWindow * pCurChild = m_pFirstChild; DWORD nCurPos = 0; for (; pCurChild != NULL; pCurChild = pCurChild->GetDuiWindow(GDUI_NEXTSIBLING)) { if (pCurChild == pChild) { break; } ++nCurPos; } if (pCurChild == NULL) { return FALSE; } if (nCurPos == nPos) { if (bEnsureVisible) { EnsureVisible(pChild); } NotifyInvalidate(); return TRUE; } if (nPos == 0) { BringWindowAfter(pChild, ICWND_FIRST); } else { CDuiWindow * pNewNext = m_pFirstChild; for (UINT i = 0; i < nPos && pNewNext != NULL; i++) { pNewNext = pNewNext->GetDuiWindow(GDUI_NEXTSIBLING); } BringWindowAfter(pChild, pNewNext); } UpdateScroll(); ReLayout(); if (bEnsureVisible) { EnsureVisible(pChild); } NotifyInvalidate(); return TRUE; }
int CDuiItemBox::GetItemPos(CDuiWindow * lpCurItem) { if (lpCurItem == NULL) { return -1; } int nPos = 0; for (CDuiWindow *pChild = m_pFirstChild; pChild != NULL; pChild = pChild->GetDuiWindow(GDUI_NEXTSIBLING), ++nPos) { if (pChild == lpCurItem) { return nPos; } } return -1; }