WM_CTLCOLORDLG

인수

wParam : 대화상자의 DC 핸들. 이 핸들값으로 전경색과 배경색을 변경한다.

lParam : 대화상자의 핸들.

설명

시스템이 대화상자를 그리기 전에 이 메시지를 보내 배경색상을 질문한다. DefWindowProc은 시스템에 정의된 배경 색상을 리턴하도록 되어 있으나 이 메시지를 대화상자가 직접 처리하면 wParam으로 전달되는 DC에 배경색과 전경색을 설정할 수 있으며 배경 브러시 핸들을 리턴함으로써 대화상자의 배경색을 변경할 수 있다.

배경 브러시를 변경하고자 할 경우 WM_INITDIALOG 메시지에서 미리 브러시를 만들어 놓고 이 메시지에서 브러시 핸들을 리턴해 주면 된다. 대화상자는 이 메시지에서 리턴한 브러시 핸들로 배경을 채색하다. 이 브러시는 시스템이 자동으로 파괴해 주지 않으므로 더 이상 필요가 없어졌을 때(EndDialog 호출 직전)대화상자가 파괴해 주어야 한다.

이 메시지는 같은 스레드 내에서만 보내진다.

리턴

이 메시지를 처리했으면 배경 브러시의 핸들을 리턴해 준다. 브러시 핸들값은 INT_PTR로 캐스팅된 후 리턴되어야 한다. 대화상자 프로시저가 FALSE를 리턴하면 디폴트 처리가 수행된다.

예제

예제 1

다음 예제는 대화상자의 배경 색상을 노란색으로 변경한다.

#include "resource.h"
BOOL CALLBACK AboutDlgProc(HWND hDlg,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	static HBRUSH hBrush;
	switch(iMessage)
	{
	case WM_INITDIALOG:
		hBrush=CreateSolidBrush(RGB(255,255,0));
		return TRUE;
	case WM_CTLCOLORDLG:
		return (INT_PTR)hBrush;
	case WM_COMMAND:
		switch (wParam)
		{
		case IDOK:
		case IDCANCEL:
			DeleteObject(hBrush);
			EndDialog(hDlg,0);
			return TRUE;
		}
		break;
	}
	return FALSE;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	HDC hdc;
	PAINTSTRUCT ps;
	TCHAR Mes[]="마우스 왼쪽 버튼을 누르십시오";

	switch(iMessage) {
	case WM_LBUTTONDOWN:
		DialogBox(g_hInst,MAKEINTRESOURCE(IDD_DIALOG1),hWnd,AboutDlgProc);
		return 0;
	case WM_PAINT:
		hdc=BeginPaint(hWnd, &ps);
		TextOut(hdc,10,10,Mes,lstrlen(Mes));
		EndPaint(hWnd, &ps);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

시스템은 대화상자를 그리기 전에 항상 WM_CTLCOLORDLG 메시지를 대화상자로 보내 배경 색상을 선택할 수 있도록 해 준다. 대화상자가 이 메시지에 응답하지 않으면 DefWindowProc이 적절한 시스템 색상을 대신 선택해 준다. 배경 브러시를 변경하려면 WM_INITDIALOG에서 미리 원하는 브러시를 생성해 놓고 WM_CTLCOLORDLG 메시지를 받았을 때 그 핸들을 리턴해 준다. 이 브러시는 EndDialog에 의해 대화상자가 파괴될 때 같이 해제해 주어야 한다. 실행중의 모습은 다음과 같다.

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr