CListCtrl 自定義柵格(vc6)

有時候需要自定義CListCtrl 的柵格,比如其顏色,寬度等,但是如果通過自定義畫,宿主畫均不能達到這種效果,這個時候只能通過自己來處理WM_PAINT消息來達到這種效果了,代碼如下:

void CMyList::OnPaint() 
{
	
	CPaintDC dc(this); // device context for painting
	
	// TODO: Add your message handler code here

	// Do not call CListCtrl::OnPaint() for painting messages
	CRect rect,txtRect;
	CPoint mypoint; 
	int chunk_height=GetCountPerPage();
	int nStart=GetTopIndex();

	CPen pen(PS_SOLID,1,RGB(200,200,100));

	dc.SelectObject(&pen);
	CFont *ft=GetFont();
	dc.SelectObject(ft);
	dc.SetBkMode(TRANSPARENT);

	CRect itemRC;
	GetClientRect(itemRC);
	for (int i=nStart;i<= (nStart + chunk_height);i++)
	{
		int nWidth=GetColumnWidth(0);
		GetItemPosition(i,&mypoint);
		rect.left = mypoint.x -2;
		rect.top  = mypoint.y-2;
		rect.right = mypoint.x + nWidth -2;
		GetItemPosition(i+1,&mypoint);
		rect.bottom =mypoint.y;

		dc.Rectangle(rect);

		CString szText=GetItemText(i,0);
		txtRect = rect;
		txtRect.DeflateRect(6,0);
		dc.DrawText(szText,txtRect,DT_LEFT );

		rect.left = rect.right ;
		nWidth=GetColumnWidth(1);
		rect.right = rect.left + nWidth ;		
		dc.Rectangle(rect);

		rect.left = rect.right ;
		nWidth=GetColumnWidth(2);
		rect.right = rect.left + nWidth ;		
		dc.Rectangle(rect);	
	

		rect.left = rect.right;
		rect.right = itemRC.right;
		dc.Rectangle(rect);	
	}
}


程序效果如下:

發佈了85 篇原創文章 · 獲贊 20 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章