2010년 10월 22일 금요일

리스트 컨트롤 색상 다루기

간단하지만 복잡하기도한 리스트 컨트롤 색상 다루기입니다.

 

칼럼과 행 별로 색상을 컨트롤할 수 있는데요,

 

일단 코드를 보시면서 말씀드릴게요,

 

밑의 코드는 제가 프로젝트하던 코드의 일부분입니다 :)

 

헤더 파일에

 

 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을 참고하셔서

 

사용하시면 됩니다.

댓글 없음:

댓글 쓰기