ListCtrl和CTreeCtrl 實際可用 失去焦點 後自定義顏色

void CSortListCtrl::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
	//LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
	//*pResult = 0;  

	*pResult=CDRF_NOTIFYITEMDRAW ;
	LPNMLVCUSTOMDRAW pDraw=(LPNMLVCUSTOMDRAW)pNMHDR;
	DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;
	int nID=pDraw->nmcd.dwItemSpec;//
	int selID=GetNextItem(-1,LVNI_SELECTED);
	int subItem=pDraw->iSubItem;
	//
	if((nID==selID) && (subItem==0))
	{ 
		CDC* pdc=CDC::FromHandle(pDraw->nmcd.hdc);
		//
		CRect rc;
		
		GetItemRect(selID,&rc,LVIR_LABEL);
		CString txt=GetItemText(selID,0);
		//
		CSize sz=pdc->GetOutputTextExtent(txt);

		// 2015-2-11 繪製前部 checkbox
		CRect rtFrm(rc);
		rtFrm.right = rc.left;
		rtFrm.left = rc.left -15;
		rtFrm.DeflateRect(1,1);
		pdc->DrawFrameControl(rtFrm, DFC_BUTTON,  DFCS_BUTTONCHECK|DFCS_FLAT|DFCS_CHECKED); 

		rc.right=rc.left+sz.cx+8;
		rc.DeflateRect(1,1);
		//
		DWORD clr=GetSysColor(COLOR_HIGHLIGHT);
		pdc->FillSolidRect(&rc,clr);
		//
		pdc->SetTextColor(RGB(255,255,255));//white
		pdc->SetBkColor(clr);
		//文字往右偏移一點 好看
		rc.OffsetRect(1,0);
		pdc->TextOut(rc.left,rc.top,txt);
		*pResult |= CDRF_SKIPDEFAULT;
	}
}

void CTreeCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
    LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    //*pResult = 0;

    LPNMTVCUSTOMDRAW pDraw=(LPNMTVCUSTOMDRAW)pNMHDR;  
    DWORD dwDrawStage=pDraw->nmcd.dwDrawStage;  
    UINT uItemState =pDraw->nmcd.uItemState;  
      
    *pResult=CDRF_NOTIFYITEMDRAW;  //必須的 否則不起作用

    if((dwDrawStage & CDDS_ITEM) && (uItemState & CDIS_SELECTED) )  
    {
        pDraw->clrText = RGB(255,255,255);
        pDraw->clrTextBk = RGB(0,125,255);
    }  
}



借鑑別人文章 http://www.360doc.com/content/12/0327/18/7431010_198347847.shtml

                         http://blog.csdn.net/hlb0924/article/details/21288467

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章