2009년 11월 7일 토요일

9. 자식 윈도우 컨트롤 - 컨트롤과 색상

컨트롤과 색상

 

 

시스템 색상

윈도우즈는 화면의 여러 부분을 칠하기 위해 시스템 색상을 유지한다.

GetSysColor( )와 SetSysColors( )를 이용하여 색상을 얻거나 설정할 수 있다. 시스템 색상을 지정할 때는 윈도우즈 헤더파일에 정의된 식별자를 사용한다.

SetSysColors( )로 시스템 색상 설정시, 현재 윈도우즈 세션에 대해서만 변경된다.

 

버튼 색상

COLOR_BTNFACE : 푸시 버튼의 주요 표면 색상과 다른 것들의 배경 색상에 사용된다.

COLOR_BTNSHADOW : 푸시 버튼의 오른쪽, 아래쪽, 체크 박스 정사각형의 내부, 라디오 버튼의 원에 그림자 효과 준다.

COLOR_BTNTEXT : 푸시 버튼의 텍스트 색상에 사용된다.

COLOR_WINDOWTEXT : 나머지 것들의 텍스트 색상에 사용된다.

 

클라이언트 영역에 버튼을 표시하고 싶을 때 색상 충돌을 막기 위한 한 가지 방법은 이와 같은 시스템 색상을 따르는 것!

wndclass.hbrBackground = (HBRUSH) (COLOR_BTNFACE + 1) ;

WNDCLASS 구조체의 hbrBackground 필드에 이런 식별자를 사용할 때는 1을 더해야 하는데, 이것은 단지 NULL 값을 방지하기 위한 것이며 다른 심오한 목적이 있는 것은 아니다.

 

텍스트 색상과 텍스트 배경 색상을 시스템 색상으로 변경하는 작업

▶ 디바이스 컨텍스트 핸들을 얻은 후에..

SetBkColor (hdc, GetSysColor (COLOR_BTNFACE) ) ;

SetTextColor (hdc, GetSysColor (COLOR_WINDOWTEXT) ) ;

 

WM_CTLCOLORBTN 메시지

버튼 색상을 프로그램에서 우리가 선호하는 색상에 맞추는 방법으로 (이론상으로) WM_CTLCOLORBTN 메시지를 처리하는 것이다. 이 메시지는 자식 윈도우가 자신의 클라이언트 영역을 그리려고 할 때 부모 윈도우 프로시저에 보내는 것이다.

부모 윈도우는 이 기회를 이용하여, 자식 윈도우 프로시저가 그리기에 사용할 색상을 바꿀 수 있다.

 

부모 윈도우 프로시저가 WM_CTLCOMORBTN 메시지를 받을 때,

▷  wParam = 버튼의 디바이스 컨텍스트 핸들

▷  lParam = 버튼의 윈도우 핸들

 

WM_CTLCOLORBTN의 문제점

푸시 버튼과 오너 드로우 버튼만 부모 윈도우에 WM_COTCOLORBTN 메시지를 보낼 수 있고, 부모 윈도우가 이 메시지를 처리하여 배경을 칠할 브러시를 리턴한 경우, 오너 드로우 버튼만 이에 응답할 수 있다.

 

댓글 없음:

댓글 쓰기