コード例 #1
0
ファイル: XmlFile.cpp プロジェクト: jithuin/infogeezer
CXmlItem* CXmlItem::GetItem(const CString& sItemName, const CString& sSubItem)
{
	// cast away constness
	return const_cast<CXmlItem*>(GetItemEx(sItemName, sSubItem));
}
コード例 #2
0
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;
}
コード例 #3
0
ファイル: XmlFile.cpp プロジェクト: jithuin/infogeezer
const CXmlItem* CXmlItem::GetItem(const CString& sItemName, const CString& sSubItem) const
{
	return GetItemEx(sItemName, sSubItem);
}