본문 바로가기
프로그래머의 길/C & C++

리스트 컨트롤 / 콤보 박스 글씨 색 바꾸기

by 제이콥케이 2010. 7. 7.
반응형

void CEnvInfoSettingDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
 if(nIDCtl == IDC_COMBO8)
 {
  CString str;

  if(lpDrawItemStruct->itemID >= (UINT)m_ctl_combo8.GetCount() || !m_ctl_combo8.GetCount()) return;

  CDC *p_dc = CDC::FromHandle(lpDrawItemStruct->hDC);
  CRect r(lpDrawItemStruct->rcItem);
  int old_mode = p_dc->SetBkMode(TRANSPARENT);

  m_ctl_combo8.GetLBText(lpDrawItemStruct->itemID, str);
  switch(lpDrawItemStruct->itemAction)
  {
  case ODA_DRAWENTIRE:
  case ODA_FOCUS:
  case ODA_SELECT:
   if(lpDrawItemStruct->itemState & ODS_SELECTED)
   {
    if(strcmp(str, "DB") == 0)
     p_dc->FillSolidRect(r, RGB(0, 0, 255));
    else if(strcmp(str, "USER") == 0)
     p_dc->FillSolidRect(r, RGB(255, 0, 0));
    else
     p_dc->FillSolidRect(r, RGB(0, 0, 0));

    p_dc->SetTextColor(RGB(255, 255, 255));
    p_dc->TextOut(r.left + 5, r.top + 1, str);
   } else
   {
    p_dc->FillSolidRect(r, RGB(255, 255, 255));

    if(strcmp(str, "DB") == 0)
     p_dc->SetTextColor(RGB(0, 0, 255));
    else if(strcmp(str, "USER") == 0)
     p_dc->SetTextColor(RGB(255, 0, 0));
    else
     p_dc->SetTextColor(RGB(0, 0, 0));

    p_dc->TextOut(r.left + 5, r.top + 1, str);
   }
   break;
  }      
  p_dc->SetBkMode(old_mode);
 }
 else
        CDialog::OnDrawItem(nIDCtl, lpDrawItemStruct);
}


***** 중요 포인트 *****

컨트롤 속성에서
Has Strings  --> True 
Owner Draw --> Fixed
로 바꿔야 위 이벤트 함수에 들어간다!!

반응형