WIN16에서 nCtlColor를 이용해서 Control의 종류를 구별하던 것과 달리, WIN32에서는 WM_CTLCOLOR메시지가 WM_CTLCOLORBTN, WM_CTLCOLORDLG 등과 같은 여러 개의 별도의 메시지로 만들어졌고, 사용법은 같다.
그리고, Control Class에 WM_CTLCOLOR처리부분을 넣기 위해서, ON_WM_CTLCOLOR_REFLECT() 매크로(2.6.x 참조)를 이용한다. 우선, 메시지 처리 매크로를 설치하기 위해서 Class Wizard를 사용하든지, 아니면 직접 작성해 주든지 한다.(2.6.1 참조) 이때, Class Wizard에서 "="가 붙어 있는 메시지를 선택해야 한다. 즉, WM_CTLCOLOR를 넣어 주기 위해서는 "=WM_CTLCOLOR"를 선택하면 ON_WM_CTLCOLOR_REFLECT()가 들어 간다. 하지만, 이 "=WM_CTLCOLOR"는 CButton, CEdit등의 클래스에서만 나타나고, 여기서 상속 받는 클래스에서는 나타나지 않았다. 그래서, 직접 작성해 주어야 할 경우도 많을 것이다.
다음과 같이 추가하면 된다.
//매시지 맵에서...
[code]
ON_WM_CTLCOLOR_REFLECT()
HBRUSH CMyControl::CtlColor(CDC* pDC, UINT nCtlColor)
{
//문자색을 바꾸고 싶을 때...
pDC->SetTextColor(RGB(192, 192, 192));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)m_hBrush;
}
[/code]
그리고, Control Class에 WM_CTLCOLOR처리부분을 넣기 위해서, ON_WM_CTLCOLOR_REFLECT() 매크로(2.6.x 참조)를 이용한다. 우선, 메시지 처리 매크로를 설치하기 위해서 Class Wizard를 사용하든지, 아니면 직접 작성해 주든지 한다.(2.6.1 참조) 이때, Class Wizard에서 "="가 붙어 있는 메시지를 선택해야 한다. 즉, WM_CTLCOLOR를 넣어 주기 위해서는 "=WM_CTLCOLOR"를 선택하면 ON_WM_CTLCOLOR_REFLECT()가 들어 간다. 하지만, 이 "=WM_CTLCOLOR"는 CButton, CEdit등의 클래스에서만 나타나고, 여기서 상속 받는 클래스에서는 나타나지 않았다. 그래서, 직접 작성해 주어야 할 경우도 많을 것이다.
다음과 같이 추가하면 된다.
//매시지 맵에서...
[code]
ON_WM_CTLCOLOR_REFLECT()
HBRUSH CMyControl::CtlColor(CDC* pDC, UINT nCtlColor)
{
//문자색을 바꾸고 싶을 때...
pDC->SetTextColor(RGB(192, 192, 192));
pDC->SetBkMode(TRANSPARENT);
return (HBRUSH)m_hBrush;
}
[/code]
'Windows > MFC' 카테고리의 다른 글
콤보박스(ComboBox)의 리스트박스(ListBox)의 크기를 바꾸는 방법 (0) | 2013.10.02 |
---|---|
콤보박스 (ComboBox)의 리스트 컨트롤(ListBox Control)을 알아내는 방법 (0) | 2013.10.02 |
서브 클래싱 (SubClassing) (0) | 2013.10.02 |
최상위 윈도우 만들기 (TopMost) (0) | 2013.10.02 |
윈도우 폰트 변경 (Font) (0) | 2013.10.02 |