콤보박스를 사용하면서 글자를 출력할 경우, 기본 폰트를 사용하면 너무 위 아래가 따닥 따닥
붙어 있어 보기가 조금 답답해 보이는 경향이 있다.

콤보에서 제공해주는 가상함수  DrawItem 조금만 손보면 아주쉽게 이를 조절할  있다.
속성은 Owner Draw Fixed, Has String 속성을 주고 코드를 다음과 같이 수정하면 된다.

void CComboBoxHeight::DrawItem(LPDRAWITEMSTRUCT pDIStruct)
{
    
CDC dc;

    
// 코드를 간결하게 하기 위하여 전달된 HDC CDC 어태치한다.
    
if( !dc.Attach( pDIStruct -> hDC ) )
        
return;

    
// 현재 전달된 아이템이 선택되어진 넘인이 확인한다.
    
if( pDIStruct -> itemState & ODS_SELECTED )
    {
        
// 속성에 맞게 글자색배경색상을 지정한다.
        
dc.SetTextColor((0x00FFFFFF & ~(GetSysColor(COLOR_WINDOWTEXT))));
        
dc.SetBkColor(GetSysColor(COLOR_HIGHLIGHT));
        
dc.FillSolidRect(&pDIStruct->rcItem, GetSysColor(COLOR_HIGHLIGHT));
    }
    
else
    {
        
dc.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
        
dc.SetBkColor(RGB(0,0,0));
        
dc.FillSolidRect(&pDIStruct->rcItem, GetSysColor(COLOR_WINDOW));
    }

    
// 아이템의 인덱스가 -1 아니면
    
if(pDIStruct->itemID != -1)
    {
        
// 선택된 아이템의 문자열을 읽어온다.
        
CString m_SelText;
        
GetLBText(pDIStruct->itemID, m_SelText);

        
// 만약 선택된 아이템이 디저블 속성이면 글자 색상을 회색으로
        
if(pDIStruct->itemState & ODS_DISABLED)
            
dc.SetTextColor(::GetSysColor(COLOR_GRAYTEXT));

        
// 배경은 투명 속성으로
        
dc.SetBkMode(TRANSPARENT);

        
// 아이템 영역의 수직 센터에 글자를 그린다.
        
dc.DrawText(m_SelText, &pDIStruct->rcItem, DT_VCENTER | DT_SINGLELINE);

        
// 필요하면 여기다비트맵을 그리거나아이콘을 그리거나 맘대로 하면 된다.
        
// 보통 아이콘을 자주 그리는데 DrawIconEx 사용하면 된다.
    }

    
dc.Detach();

    
return;
}

100.zip
0.09MB

+ Recent posts