간단하지만 복잡하기도한 리스트 컨트롤 색상 다루기입니다.
칼럼과 행 별로 색상을 컨트롤할 수 있는데요,
일단 코드를 보시면서 말씀드릴게요,
밑의 코드는 제가 프로젝트하던 코드의 일부분입니다 :)
헤더 파일에
afx_msg void OnCustomdrawList(NMHDR* pNMHDR, LRESULT* pResult);
이렇게 추가해 주시구요,
메시지맵을 등록해야 겠죠,
BEGIN_MESSAGE_MAP 밑에 이렇게 입력해줍니다.
ON_NOTIFY(NM_CUSTOMDRAW, IDC_RESULT/*컨트롤 리소스 ID*/, OnCustomdrawList)
그리고 사용자 함수를 추가해서 코딩해 줍니다.
void CNetManagerView::OnCustomdrawTcpList(NMHDR* pNMHDR, LRESULT* pResult)
{
CString strProtocol,strRSTFIN;
BOOL bEmerFlag = FALSE;
NMLVCUSTOMDRAW* pLVCD = (NMLVCUSTOMDRAW*)pNMHDR;
strProtocol = m_ctrlTCPlist.GetItemText(pLVCD->nmcd.dwItemSpec, 1);
strRSTFIN = m_ctrlTCPlist.GetItemText(pLVCD->nmcd.dwItemSpec, 9);
if( (strRSTFIN.Find("RST") != -1) || (strRSTFIN.Find("FIN") != -1) )
{
bEmerFlag=TRUE;
}
*pResult = 0;
if ( CDDS_PREPAINT == pLVCD->nmcd.dwDrawStage )
*pResult = CDRF_NOTIFYITEMDRAW;
else if ( CDDS_ITEMPREPAINT == pLVCD->nmcd.dwDrawStage )
{
if( bEmerFlag ) // TCP && 긴급 플래그 일떄
{
pLVCD->clrText = RGB(255,102,102);
}
pLVCD->clrTextBk = RGB(237,255,255);
if( !bEmerFlag ) // 긴급 플래그가 아닐때
{
pLVCD->clrText = RGB(0, 0, 0);
}
*pResult = CDRF_DODEFAULT;
}
}
프로그램 화면캡쳐의 일부분입니다. 저런식으로 색상을 변경할 수 있습니다.
경우에 따라서 색상을 입히시면 됩니다,
RGB값은 임의로 주시면 되구요, (RGB 색상 표를 참고하세요 )
기본 리스트 컨트롤 배경 색상 및 글자 색상 글자 배경 색상은
API를 제공하고 있습니다.
SetBkColor(), SetTextBkColor() 등을 MSDN을 참고하셔서
사용하시면 됩니다.
댓글 없음:
댓글 쓰기