LRESULT CHeaderCtrlExt::OnHdnEndDrag(WPARAM wParam, LPARAM lParam)
{
	int nCount = GetItemCount();
	int* piArray = new int[nCount];
	GetOrderArray(piArray, nCount);
	SetOrderArray(nCount, piArray);
	delete []piArray;

	return 1;
}
void CHeaderCtrlExt::SetVisible(int nIndex, BOOL bVisible)
{
	CItemData* pData = (CItemData*)GetItemData(nIndex);

	if(! pData)return;

	if(pData->m_bVisible != bVisible)
	{
		pData->m_bVisible = bVisible;
		// get total items
		int nCount = GetItemCount();
		// get current item's order
		int nOrder = IndexToOrder(nIndex);
		int* piCols = new int[nCount];
		ASSERT(piCols);

		GetOrderArray(piCols, nCount);
		if(bVisible)
		{
			// restore item width
			ResetItemWidth(nIndex);
			// move the item to the original position
			int nTarget;
			int nVisible = GetVisibleItemCount();
			if(nIndex > nVisible - 1)nTarget = nVisible - 1;
			else nTarget = nIndex;

			ASSERT(nTarget <= nOrder);

			for(int i = nOrder;i > nTarget;--i)piCols[i] = piCols[i - 1];
			piCols[nTarget] = nIndex;
		}
		else
		{
			// hide item
			SetItemWidth(nIndex, 0);
		}

		SetOrderArray(nCount, piCols);
		delete []piCols;
	}
}
Example #3
0
BOOL CEnHeaderCtrl::SetItemOrder(const CIntArray& aOrder)
{
	return SetOrderArray(aOrder.GetSize(), (LPINT)aOrder.GetData());
}