콤보박스를 사용하면서 글자를 출력할 경우, 기본 폰트를 사용하면 너무 위 아래가 따닥 따닥
붙어 있어 보기가 조금 답답해 보이는 경향이 있다.
콤보에서 제공해주는 가상함수 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;
}