Picture 컨트롤에 이미지를 넣는 것은 쉬운일이다.
컨트롤 자체가 그러하도록 설계되었기 때문이지만, 이 또한 글자를 제대로 표현할 수 없다.
그렇다면 이미지에 글자를 그려 넣을 것인가?

기존에 Text 의 배경을 투명하게 하고, 색상을 넣을 수 있다면 이미지도 넣을 수 있지 않을까?
답은 그렇다이다.

MFC에서 제공해주는 많은 객체중에 CBrush는 상당히 잘 꾸며진 객체이다.
그중에 관심을 가져볼만한것이 Hatch와 Partten 기능이다.
해치는 제공해준 패턴만을 그려주지만, 패턴기능은 사용자가 비트맵을 제공함으로써
배경을 원하는 형태로 그릴 수 있도록 해준다.

아래는 비주얼 스튜디오에서 리소스 편집창의 일부를 캡쳐한 화면이다.

저 배경에 아래의 그림을 깔아보자 ^^;

어디서 많이본 그림인데??
윈도우즈에서 기본으로 제공해주는 커피잔.bmp이다 저걸 컨트롤의 배경으로 사용할 것이다.

아래의 그림은 그걸 구현해 놓은 실행화면이다.

위의 그림은 Text 컨트롤(스태틱에서 문자열만을 제공하도록 특화됨)의 배경에 비트맵을 패턴으로
깔은 것이다.
하나의 그림을 전체 배경으로 넣으려면 그림 크기를 컨트롤 크기와 동일하게 맞추면 된다.

지금까지 스태틱 컨트롤 강좌를 살펴보면 저 기능을 구현하는 것은 아주 쉽다.
1. CBitmap 객체를 선언한 후 커피잔.bmp를 로딩한다.
2. CBrush 객체를 선언한 후 패턴브러쉬로 생성하고 저 비트맵을 설정해준다.
3. 기존의 강좌에서 나온 배경에 색칠하기 기능을 이용하여 그 브러쉬를 리턴해준다.
끝~

BOOL CSssDlg::OnInitDialog() 
{
    CDialog::OnInitDialog();
    
    bm.LoadBitmap(IDB_BITMAP3);
    brh.CreatePatternBrush(&bm);
    return TRUE;  // return TRUE unless you set the focus to a control
    // EXCEPTION: OCX Property Pages should return FALSE
}

HBRUSH CSssDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) 
{
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    
    switch(nCtlColor)
    {
    case CTLCOLOR_STATIC:
        {
            pDC->SetTextColor(RGB(255, 255, 0));
            pDC->SetBkMode(TRANSPARENT);
            return brh;
        }
    }
    return hbr;
}

저 형태로 모든 코드가 마무리되었다.
지금까지 스태틱 컨트롤에 대한 기본적인 내용을 다루었으며, 저러한 기능을 모아
클래스로 생성해 둔다면 나중에 편하게 사용할 수 있을 것이다.
이것이 바로 C로는 가져보기 힘든, C++만의 장점이다.

리소스 편집창에는
그룹박스,  버튼이 다음 순서로 나오지만..
MFC를 다루는 대부분의 서적에서 다루는 내용만으로 사용에 전혀 무리가 없을 것이다.

그룹박스 투명화는 지금까지의 방법을 사용하면 테두리 사각형에 어색하게 찍힌 글자가 나오고
버튼 자체는 상속받아 이러저러한 기능을 구현하지 않으면 부모윈도우에서 처리해줄 일이 거의 없다.

다음으로는 버튼의 기능중에 특화된 첵크박스와 라디오 버튼을 함께 다루어 보겠습니다.
첵크 박스와 라디오 버튼도 CButton의 일부이지만 특화된 만큼 따로 다룰 것입니다.
즐거운 주말 되세요. ^^;

65.zip
0.09MB

+ Recent posts