Exemplo n.º 1
0
void	CReportCtrl::SortRows(int SortCol, int SortDir)
{
	if (m_Style & SORT_ARROWS)
		DrawSortArrow(m_SortCol, -1);	// erase previous column's arrow
	if (m_Style & SORT_ARROWS)
		DrawSortArrow(SortCol, SortDir < 0);	// draw new arrow
	m_SortDir = SortDir;
	m_SortCol = SortCol;
	SortRows();
}
void CXTPHeaderCtrlThemeResource::OnDrawItemSortArrow(LPDRAWITEMSTRUCT lpDIS, BOOL bAscending)
{
	CDC* pDC = CDC::FromHandle(lpDIS->hDC);
	CRect rcItem = lpDIS->rcItem;

	CPoint point;
	point.x = rcItem.right + m_iArrowPadding;
	point.y = (rcItem.top - 1) + (rcItem.Height() - m_sizeArrow.cy) / 2;

	if (point.x < rcItem.left)
		return;

	CRect rcArrow;
	rcArrow.left = point.x;
	rcArrow.top = point.y;
	rcArrow.right = point.x + m_sizeArrow.cx;
	rcArrow.bottom = point.y + m_sizeArrow.cy;

	int x = point.x + (m_sizeArrow.cx/2);

	POINT ptsArrow[3];
	ptsArrow[0].x = x-m_sizeArrow.cx/2;
	ptsArrow[0].y = bAscending ? rcArrow.bottom : rcArrow.top;
	ptsArrow[1].x = x+m_sizeArrow.cx/2;
	ptsArrow[1].y = bAscending ? rcArrow.bottom : rcArrow.top;
	ptsArrow[2].x = x;
	ptsArrow[2].y = bAscending ? rcArrow.top : rcArrow.bottom;

	DrawSortArrow(pDC, ptsArrow, bAscending);
}
void CFileBrowserListCtrl::SetSort(int Col, int Dir)
{
	if (Col == m_SortCol && Dir == m_SortDir)	// if same column and direction
		return;	// nothing to do
	if (Col != m_SortCol && m_SortCol >= 0)	// if different column has arrow
		DrawSortArrow(m_SortCol, -1);	// remove arrow from previous column
	if (Col >= 0) {	// if valid sort column
		int	items = m_DirList.GetCount();
		int	selcnt = GetSelectedCount();
		int	selmark = GetSelectionMark();
		if (selcnt || selmark >= 0) {	// if there's a selection
			// save item states and selection mark in list user data
			for (int i = 0; i < items; i++) {
				CDirItem&	item = m_DirList.GetItem(i);
				item.SetData(GetItemState(i, LVIS_SELECTED | LVIS_FOCUSED));
			}
			if (selmark >= 0) {
				CDirItem&	item = m_DirList.GetItem(selmark);
				// repurpose an item state bit to indicate selection mark
				item.SetData(item.GetData() | LVIS_ACTIVATING);
			}
		}
		DrawSortArrow(Col, Dir);	// draw appropriate arrow on new column
		m_DirList.Sort(Col, Dir);	// sort directory list
		if (selcnt || selmark >= 0) {	// if there's a selection
			// restore item states and selection mark from list user data
			for (int i = 0; i < items; i++) {
				const CDirItem&	item = m_DirList.GetItem(i);
				DWORD	state = item.GetData();
				SetItemState(i, state, LVIS_SELECTED | LVIS_FOCUSED);
				if (state & LVIS_ACTIVATING)	// if item has selection mark
					SetSelectionMark(i);
			}
		}
		Invalidate();
	}
	m_SortCol = Col;
	m_SortDir = Dir;
}
void CFileBrowserListCtrl::Init()
{
	for (int i = 0; i < COLUMNS; i++) {	// make columns
		const COL_INFO&	info = m_ColInfo[i];
		InsertColumn(i, LDS(info.Title), info.Align, info.Width);
	}
	SetImageList(&m_FileInfoCache.GetImageList(ICON_SMALL), LVSIL_SMALL);
	SetImageList(&m_FileInfoCache.GetImageList(ICON_BIG), LVSIL_NORMAL);
	// create header image list containing sort arrows
	m_HdrImgList.Create(8, 8, ILC_MASK, 1, 1);
	m_HdrImgList.Add(AfxGetApp()->LoadIcon(IDI_SORT_UP));
	m_HdrImgList.Add(AfxGetApp()->LoadIcon(IDI_SORT_DOWN));
	GetHeaderCtrl()->SetImageList(&m_HdrImgList);
	DrawSortArrow(DEFAULT_SORT_COL, DEFAULT_SORT_DIR);
	m_ViewType = GetStyle() & LVS_TYPEMASK;
}