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;
}
}