블로그 이미지
인생의무한루프
인생에 무한루프.....

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Tag

Recent Post

Archive

Recent Comment

Recent Trackback

2008. 12. 17. 15:32 Appication/VC++_Control

셀 높이 조절하기 ( MFC ComboBox 예제 )

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



콤보에서 제공해주는 가상함수  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;
}





Posted by 까막백(홈페이지 이동)
posted by 인생의무한루프