CStatic Class의 확장  
비주얼 베이직의 label control과 비슷한 CLabel Class

비주얼 베이직이나 델파이를 보면 Label 컴포넌트가 있다. 여기서 소개하는 CLabel Class도 그것과 비슷한 기능을 한다.
 CLabel Class는 CStatic Class를 상속받아 만들어진 것으로 Bold, Italic, Underline등의 형태는 물론 인터넷 link의 형태로도 쉽게 나타낼 수 있다.

사용법은 다음과 같다.

1. 일반적인 방법으로 다이얼로그 박스를 만든다.

2. 클래스 위저드를 사용해서 OnInitDialog 함수를 오버라이딩한다. WM_INITDIALOG 메시지를 선택하면 되겠죠?

3. Label.cpp와 Label.h 파일을 프로젝트에 포함시킨다. 이 코드는 여기를 눌러 다운받아요. 

4. #include "label.h"  -> 다이얼로그 박스의 cpp파일에 include한다.

5. 문자열을 표시하고자 하는 static control을 다이얼로그에 위치시킨다. 이때 컨트롤의 ID는 IDC_STATIC이 아니라 다른 걸루 바꾸어야 한다.

6. 클래스 위저드의 Member Variables 탭에서 5번에서 만든 static control을 연결시킨다.
  Category는 Control로 하고, Variable type는 CStatic으로 한다.

7. 다이얼로그 클래스의 헤더파일에 #include "Label.h"을 포함시키고, 방금 클래스 위저드로 연결한 변수를 CStatic에서 CLabel로 바꾼다. 위치는 생성자 선언한 바로 다음입니다.

8. 다음은 OnInitDialog() 함수에 표시하고자 하는 문자열의 속성을 정한다.
  다음의 코드는 위 그림에서 보인 예제를 나타내는 코드이다. 멤버함수를 한꺼번에 적을 때 마지막 멤버함수에만 세미콜론이 들어간다는 것에 주의.

BOOL CLabelDlg::OnInitDialog()
{
        CDialog::OnInitDialog();
        
        // TODO: Add extra initialization here
        m_font_sample
                .SetBkColor( RGB(0,255,0) )
                .SetText("Sample Text")
                .SetTextColor( RGB(0,0,255) )
                .SetFontBold(TRUE)
                .SetFontName("Book Antiqua")
                .SetFontUnderline(TRUE)
                .SetFontItalic(TRUE)
                .SetFontSize(30)
                .SetSunken(TRUE)
                .SetBorder(TRUE)
                .FlashText(TRUE)
                .FlashBackground(TRUE);
        
        m_font_link.SetLink(TRUE)
                .SetTextColor(RGB(0,0,255))
                .SetFontUnderline(TRUE)
                .SetLinkCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));     

        return TRUE;  // return TRUE unless you set the focus to a control
                      // EXCEPTION: OCX Property Pages should return FALSE
}

9. 다음의 CLabel Class의 멤버함수들이다.

API of CLabel

CLabel& SetBkColor(COLORREF crBkgnd)     : 배경색을 선택
CLabel& SetText(const CString& strText)      : 표시할 컨트롤의 문자열을 선택
CLabel& SetTextColor(COLORREF crText)     : 글자색을 선택
CLabel& SetFontBold(BOOL bBold)             : Bold 속성을 토글  
CLabel& SetFontName(const CString& strFont) : 폰트종류를 선택
CLabel& SetFontUnderline(BOOL bSet)         : Underline 속성을 토글
CLabel& SetFontItalic(BOOL bSet)             : Italic 속성을 토글
CLabel& SetFontSize(int nSize)                 : 폰트크기를 선택
CLabel& SetSunken(BOOL bSet)                : Sunken 속성을 토글
CLabel& SetBorder(BOOL bSet)                : Border 속성을 토글
CLabel& FlashText(BOOL bSet)                : 깜박이는 글자속성을 토글
CLabel& FlashBackground(BOOL bSet)          : 깜박이는 배경속성을 토글
CLabel& SetLink(BOOL bLink)                  : Internet link속성을 토글
CLabel& SetLinkCursor(HCURSOR hCursor)     : link에 쓰일 커서를 선택

(note)
 SetText() 멤버함수로 나타낼 문자열을 정하면 컨트롤의 캡션에 있는 문자열은 무시된다.  
 이 멤버함수를 쓰지않으면 캡션의 문자열이 표시된다.
 Internet link 형태로 문자열을 나타내려면 당연히 http://xxx.xxx.xxx 와 같은 형태의 문자열 이어야 되겠죠.. link 문자열 위에서 마우스 커서를 바꿀 때, Windows가 제공하는 표준커서를 사용하려면 LoadStandardCursor()함수를 쓰고, 표준 커서가 아닌 걸 쓰려면 LoadCursor() 함수를 사용합니다. 참고로 Windows가 제공하는 표준커서는 다음과 같습니다.

 

IDC_ARROW

표준 화살표 커서

IDC_IBEAM

I 모양의 문자열 삽입 커서

IDC_WAIT

모래 시계 커서

IDC_CROSS

십자 모양 커서

IDC_UPARROW

위쪽 화살표 커서

IDC_SIZE

윈도우의 크기를 조정할 때 사용하는 커서

IDC_ICON

파일을 드래그할 때 사용하는 커서

IDC_SIZENWSE

좌상단, 우하단 화살표 커서

IDC_SIZENESW

좌하단, 우상단 화살표 커서

IDC_SIZEWE

수평 크기 조절 커서

IDC_SIZENS

수직 크기 조절 커서