CXmlItem* CXmlItem::GetItem(const CString& sItemName, const CString& sSubItem) { // cast away constness return const_cast<CXmlItem*>(GetItemEx(sItemName, sSubItem)); }
void CFlatHeaderCtrl::AutoSizeItemsImpl(INT iItem) { ASSERT(iItem >= -1); INT i, iItems = GetItemCount(), iTemp; INT iOrder = -1; if(iItems <= 0) return; HDITEM hditem; HDITEMEX hditemex; if(iItem >= 0) { hditem.mask = HDI_ORDER; GetItem(iItem, &hditem); iOrder = hditem.iOrder; if(iOrder == iItems-1) { iItem = -1; iOrder = -1; } } CArray<FHAUTOSIZE, FHAUTOSIZE&> arrayItems; arrayItems.SetSize(iItems); INT iWidth = 0; INT iMinWidth = 0; INT iMaxWidth = 0; for(i=iOrder+1; i<iItems; i++) { INT iIndex = OrderToIndex(i); hditem.mask = HDI_WIDTH; VERIFY(GetItem(iIndex, &hditem)); VERIFY(GetItemEx(iIndex, &hditemex)); FHAUTOSIZE fhas; fhas.iIndex = iIndex; fhas.iWidth = hditem.cxy; fhas.iMinWidth = hditemex.iMinWidth; fhas.iMaxWidth = hditemex.iMaxWidth; arrayItems[i] = fhas; iWidth += fhas.iWidth; iMinWidth += fhas.iMinWidth; iMaxWidth += MAXWIDTH(fhas.iMaxWidth); } ASSERT(GetParent() != NULL); CRect rectClient; GetParent()->GetClientRect(rectClient); if(rectClient.Width() <= 0) return; INT iClientWidth = max(rectClient.Width(), iMinWidth); if(iItem >= 0) { CRect rectItem; GetItemRect(iItem, rectItem); iClientWidth -= rectItem.right; } if(iOrder >= 0) { FHAUTOSIZE& fhas = arrayItems[iOrder]; iTemp = min(fhas.iWidth, iClientWidth - iMinWidth); iTemp = max(fhas.iMinWidth, iTemp); iTemp = min(MAXWIDTH(fhas.iMaxWidth), iTemp); arrayItems[iOrder].iWidth = iTemp; iWidth -= iTemp; iClientWidth -= iTemp; } iWidth = max(1, iWidth); INT iResult = 0; for(i=iOrder+1; i<iItems; i++) { FHAUTOSIZE& fhas = arrayItems[i]; iTemp = max(fhas.iMinWidth, (fhas.iWidth * iClientWidth)/iWidth); iTemp = min(MAXWIDTH(fhas.iMaxWidth), iTemp); arrayItems[i].iWidth = iTemp; iResult += iTemp; } if(iResult != iClientWidth) { INT iLast = -1; i = iOrder+1; while(iResult != iClientWidth && iResult != iLast) { FHAUTOSIZE& fhas = arrayItems[i]; iTemp = fhas.iWidth; if(iResult < iClientWidth && iTemp < MAXWIDTH(fhas.iMaxWidth)) { iTemp = min(iTemp+1, MAXWIDTH(fhas.iMaxWidth)); iResult += iTemp - fhas.iWidth; } else if(iResult > iClientWidth && iTemp > fhas.iMinWidth) { iTemp = max(iTemp-1, fhas.iMinWidth); iResult -= fhas.iWidth - iTemp; } iLast = iResult; arrayItems[i].iWidth = iTemp; i = i+1 < iItems ? i+1:iOrder+1; } } m_bAutoSizing = TRUE; for(i=iOrder+1; i<iItems; i++) { hditem.mask = HDI_WIDTH; hditem.cxy = arrayItems[i].iWidth; VERIFY(SetItem(arrayItems[i].iIndex, &hditem)); } m_bAutoSizing = FALSE; }
const CXmlItem* CXmlItem::GetItem(const CString& sItemName, const CString& sSubItem) const { return GetItemEx(sItemName, sSubItem); }