티스토리 뷰

MFC

[MFC] List Control 라인 단위 색상 지정하기

개발하는꼬물이 2018. 4. 4. 10:50


위와 같이, 리스트에서 특정 단어가 표시된 라인의 색상을 변경하고 싶을 때

아래의 코드를 이용하여 리스트의 글자 색상과 배경 색상을 지정할 수 있다!




1. 헤더 파일(.h)에 추가

afx_msg void OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult);

 

2. MessageMap에 추가

BEGIN_MESSAGE_MAP(CTestDlg, CDialogEx)
	ON_NOTIFY(NM_CUSTOMDRAW, IDC_TEST_LIST, OnCustomdrawList)  
        // 2번째 인자 : List Control ID, 3번째 인자 : 실행할 함수
     END_MESSAGE_MAP()

  

3. 실행 함수 정의

void CTestDlg::OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult)
{
	CString strType;
	BOOL bErrorFlag = FALSE;
	BOOL bWarnningFlag = FALSE;

	NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)pNMHDR;

	strType = m_ListCtrl.GetItemText(pLVCD->nmcd.dwItemSpec, 0);

	if ((strType.Find(_T("ERROR")) != -1))
	{
		bErrorFlag = TRUE;
	}

	if ((strType.Find(_T("WARNNING")) != -1))
	{
		bWarnningFlag = TRUE;
	}

	*pResult = 0;

	if (CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage)
		*pResult = CDRF_NOTIFYITEMDRAW;

	else if (CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage)
	{
		if (bErrorFlag)
		{
			pLVCD->clrText = RGB(255, 0, 0);  // 글자 색 변경 
                        //pLVCD->clrTextBk = RGB(0, 0, 0);  // 배경 색 변경 
		}
		else if (bWarnningFlag)
		{
			pLVCD->clrText = RGB(0, 0, 255);  
			//pLVCD->clrTextBk = RGB(237, 255, 255);
		}
		else
		{
			pLVCD->clrText = RGB(0, 0, 0);
		}

		*pResult = CDRF_DODEFAULT;
	}
}

  



댓글