단추 메시지
단추는 부모 창에 메시지를 보낼 수 있고 부모 창은 단추에 메시지를 보낼 수 있습니다.
이 섹션에서 설명하는 항목은 다음과 같습니다.
단추에 메시지 보내기
부모 창은 SendMessage 함수를 사용하여 겹친 창 또는 자식 창의 단추에 메시지를 보낼 수 있거나, SendDlgItemMessage, CheckDlgButton, CheckRadioButton 및 IsDlgButtonChecked 함수를 사용하여 대화 상자의 단추에 메시지를 보낼 수 있습니다.
애플리케이션은 BM_GETCHECK 메시지를 사용하여 확인란 또는 라디오 단추의 선택 상태를 검색할 수 있습니다. 또한 애플리케이션은 BM_GETSTATE 메시지를 사용하여 단추의 현재 상태(선택 상태, 누름 상태 및 포커스 상태)를 검색할 수 있습니다. 특정 상태에 대한 정보를 가져오려면 반환된 상태 값에 비트마스크를 사용합니다.
BM_SETCHECK 메시지는 확인란 또는 라디오 단추의 선택 상태를 설정합니다. 메시지는 0을 반환합니다. BM_SETSTATE 메시지는 단추의 누름 상태를 설정합니다. 이 메시지도 0을 반환합니다. BM_SETSTYLE 메시지는 단추의 스타일을 변경합니다. 형식 내에서 단추 스타일을 변경하도록 설계되었습니다(예: 확인란을 자동 확인란으로 변경). 형식 간 변경(예: 확인란을 라디오 단추로 변경)용으로 설계되지 않았습니다. 애플리케이션은 단추를 한 형식에서 다른 형식으로 변경해서는 안 됩니다.
BS_BITMAP 또는 BS_ICON 스타일의 단추는 텍스트 대신 비트맵이나 아이콘을 표시합니다. BM_SETIMAGE 메시지는 단추가 있는 비트맵 또는 아이콘에 대한 핸들을 연결합니다. BM_GETIMAGE 메시지는 단추와 연결된 비트맵 또는 아이콘에 대한 핸들을 검색합니다.
또한 애플리케이션은 DM_GETDEFID 메시지를 사용하여 대화 상자에서 기본 누름 단추 컨트롤의 식별자를 검색할 수 있습니다. 애플리케이션은 DM_SETDEFID 메시지를 사용하여 대화 상자의 기본 누름 단추를 설정할 수 있습니다.
CheckDlgButton 또는 CheckRadioButton 함수를 호출하는 것은 BM_SETCHECK 메시지를 보내는 것과 같습니다. IsDlgButtonChecked 함수를 호출하는 것은 BM_GETCHECK 메시지를 보내는 것과 같습니다.
단추의 메시지 처리
단추의 알림은 WM_COMMAND 또는 WM_NOTIFY 메시지로 전송됩니다. 사용된 메시지에 대한 정보는 각 알림에 대한 참조 페이지에서 찾을 수 있습니다.
메시지 처리 방법에 대한 자세한 내용은 컨트롤 메시지를 참조하세요. 단추 메시지도 참조하세요.
단추의 알림 메시지
사용자가 단추를 클릭하면 상태가 변경되고 단추는 WM_COMMAND 메시지 형식의 알림 코드를 부모 창에 보냅니다. 예를 들어, 누름 단추 컨트롤은 사용자가 단추를 선택할 때마다 BN_CLICKED 알림 코드를 보냅니다. 모든 경우(BCN_HOTITEMCHANGE 제외), wParam 매개 변수의 하위 단어에는 컨트롤 식별자가 포함되고, wParam의 상위 단어에는 알림 코드가 포함되고, lParam 매개 변수에는 컨트롤 창 핸들이 포함됩니다.
메시지와 부모 창의 응답은 모두 단추의 형식, 스타일 및 현재 상태에 따라 다릅니다. 다음은 애플리케이션이 모니터링하고 처리해야 하는 단추 알림 코드입니다.
알림 코드 | 설명 |
---|---|
BCN_HOTITEMCHANGE | 마우스가 단추의 클라이언트 영역에 들어가거나 나갔습니다. |
BN_CLICKED | 사용자가 단추를 클릭했습니다. |
BN_DBLCLK 또는 BN_DOUBLECLICKED | 사용자가 단추를 두 번 클릭했습니다. |
BN_DISABLE | 단추가 사용하지 않도록 설정되었습니다. |
BN_PUSHED 또는 BN_HILITE | 사용자가 단추를 눌렀습니다. |
BN_KILLFOCUS | 단추가 키보드 포커스를 잃었습니다. |
BN_PAINT | 단추를 칠해야 합니다. |
BN_SETFOCUS | 단추가 키보드 포커스를 얻었습니다. |
BN_UNPUSHED 또는 BN_UNHILITE | 더 이상 단추를 누르지 않습니다. |
BS_NOTIFY 스타일이 있는 경우에만 단추가 BN_DISABLE, BN_PUSHED, BN_KILLFOCUS, BN_PAINT, BN_SETFOCUS 및 BN_UNPUSHED 알림 코드를 보냅니다. BN_DBLCLK 알림 코드는 BS_USERBUTTON, BS_RADIOBUTTON 및 BS_OWNERDRAW 단추에 대해 자동으로 전송됩니다. 다른 단추 형식은 BS_NOTIFY 스타일이 있는 경우에만 BN_DBLCLK를 보냅니다. 모든 단추는 단추 스타일에 관계없이 BN_CLICKED 알림 코드를 보냅니다.
자동 단추의 경우 시스템은 누름 상태를 변경하고 단추를 칠합니다. 이 경우 애플리케이션은 일반적으로 BN_CLICKED 및 BN_DBLCLK 알림 코드만 처리합니다. 자동이 아닌 단추의 경우 애플리케이션은 일반적으로 단추의 상태를 변경하라는 메시지를 전송하여 알림 코드에 응답합니다. 단추로 메시지를 보내는 방법에 대한 자세한 내용은 단추에 메시지 보내기를 참조하세요.
사용자가 소유자가 그린 단추를 선택하면 단추가 그리려는 컨트롤의 식별자와 크기 및 상태에 대한 정보가 포함된 WM_DRAWITEM 메시지를 부모 창에 보냅니다.
단추 색 메시지
시스템은 단추에 대한 기본 색 값을 제공합니다. 애플리케이션은 GetSysColor 함수를 호출하여 이러한 색의 기본값을 검색하거나 SetSysColors 함수를 호출하여 값을 설정할 수 있습니다. 다음 표는 기본 단추 색 값을 보여 줍니다.
값 | 요소 색 |
---|---|
COLOR_BTNFACE | 단추 모양입니다. |
COLOR_BTNHIGHLIGHT | 단추의 영역(상단 및 왼쪽 가장자리)을 강조 표시합니다. |
COLOR_BTNSHADOW | 단추의 그림자 영역(하단 및 오른쪽 가장자리)입니다. |
COLOR_BTNTEXT | 단추의 일반(회색이 아닌) 텍스트. |
COLOR_GRAYTEXT | 단추의 사용하지 않도록 설정된(회색) 텍스트입니다. 현재 디스플레이 드라이버가 단색 회색을 지원하지 않는 경우 이 색은 0으로 설정됩니다. |
COLOR_WINDOW | 창 배경입니다. |
COLOR_WINDOWFRAME | 창 프레임입니다. |
COLOR_WINDOWTEXT | 창의 텍스트입니다. |
그러나 SetSysColors 호출은 모든 애플리케이션에 영향을 미치므로 애플리케이션의 단추를 사용자 지정하기 위해 이 함수를 호출해서는 안 됩니다.
시스템은 단추를 그리기 전에 단추의 부모 창에 WM_CTLCOLORBTN 메시지를 보냅니다. 이 메시지에는 단추의 디바이스 컨텍스트에 대한 핸들과 자식 창에 대한 핸들이 포함되어 있습니다. 부모 창은 이 핸들을 사용하여 단추의 텍스트와 배경색을 변경할 수 있습니다. 그러나 소유자가 그린 단추만 메시지를 처리하는 부모 창에 응답합니다.
단추 기본 메시지 처리
미리 정의된 단추 컨트롤 창 클래스에 대한 창 프로시저는 단추 컨트롤 프로시저가 처리하지 않는 모든 메시지에 대해 기본 처리를 수행합니다. 단추 컨트롤 프로시저가 메시지에 대해 FALSE를 반환하면 미리 정의된 창 프로시저는 메시지를 확인하고 다음 표에 나열된 기본 작업을 수행합니다.
메시지 | 기본 작업 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
BM_CLICK | 단추에 WM_LBUTTONDOWN 및 WM_LBUTTONUP 메시지를 보내고 부모 창에 BN_CLICKED 알림 코드를 보냅니다. | ||||||||||||||||
BM_GETCHECK | 단추의 선택 상태를 반환합니다. | ||||||||||||||||
BM_GETIMAGE | 단추와 연결된 비트맵이나 아이콘에 대한 핸들을 반환하거나 단추에 비트맵이나 아이콘이 없으면 NULL을 반환합니다. | ||||||||||||||||
BM_GETSTATE | 단추의 현재 선택 상태, 누름 상태 및 포커스 상태를 반환합니다. | ||||||||||||||||
BM_SETCHECK | 라디오 단추 및 확인란의 모든 스타일에 대한 확인 상태를 설정합니다. 라디오 단추의 wParam 매개 변수가 0보다 크면 단추에 WS_TABSTOP 스타일이 지정됩니다. | ||||||||||||||||
BM_SETIMAGE | 지정된 비트맵 또는 아이콘 핸들을 단추와 연결하고 이전 비트맵 또는 아이콘에 대한 핸들을 반환합니다. | ||||||||||||||||
BM_SETSTATE | 단추의 누름 상태를 설정합니다. 소유자가 그린 단추의 경우 단추 상태가 변경되면 WM_DRAWITEM 메시지가 부모 창으로 전송됩니다. | ||||||||||||||||
BM_SETSTYLE | 단추 스타일을 설정합니다. lParam 매개 변수의 하위 단어가 TRUE이면 단추가 다시 그려집니다. | ||||||||||||||||
WM_CHAR | 사용자가 더하기(+) 또는 등호(=) 키를 누를 때 확인란 또는 자동 확인란을 선택합니다. 사용자가 빼기(-) 키를 누르면 확인란 또는 자동 확인란의 선택을 취소합니다. | ||||||||||||||||
WM_ENABLE | 단추를 칠합니다. | ||||||||||||||||
WM_ERASEBKGND | 소유자가 그린 단추의 배경을 지웁니다. 다른 단추의 배경은 WM_PAINT 및 WM_ENABLE 처리의 일부로 지워집니다. | ||||||||||||||||
WM_GETDLGCODE | 다음 표와 같이 기본 단추 프로시저에서 처리하는 입력 형식을 나타내는 값을 반환합니다.
|
||||||||||||||||
WM_GETFONT | 현재 글꼴에 대한 핸들을 반환합니다. | ||||||||||||||||
WM_KEYDOWN | 사용자가 스페이스바를 누르면 단추를 누릅니다. | ||||||||||||||||
WM_KEYUP | TAB 키를 제외한 모든 경우에 대해 마우스 캡처를 해제합니다. | ||||||||||||||||
WM_KILLFOCUS | 단추에서 포커스 사각형을 제거합니다. 누름 단추 및 기본 누름 단추의 경우 포커스 사각형이 무효화됩니다. 단추에 마우스 캡처가 있는 경우 캡처가 해제되고 단추가 클릭되지 않으며 모든 누름 상태가 제거됩니다. | ||||||||||||||||
WM_LBUTTONDBLCLK | 라디오 단추 및 소유자가 그린 단추에 대해 부모 창에 BN_DBLCLK 알림 코드를 보냅니다. 다른 단추의 경우 더블 클릭은 WM_LBUTTONDOWN 메시지로 처리됩니다. | ||||||||||||||||
WM_LBUTTONDOWN | 마우스 커서의 위치가 단추의 클라이언트 사각형 내에 있는 경우 단추를 강조 표시합니다. | ||||||||||||||||
WM_LBUTTONUP | 단추에 마우스 캡처가 있는 경우 마우스 캡처를 해제합니다. | ||||||||||||||||
WM_MOUSEMOVE | 단추에 마우스 캡처가 있는 경우 WM_LBUTTONDOWN과 동일한 작업을 수행합니다. 그렇지 않으면 아무 작업도 수행되지 않습니다. | ||||||||||||||||
WM_NCCREATE | 모든 BS_OWNERDRAW 단추를 BS_PUSHBUTTON 단추로 바꿉니다. | ||||||||||||||||
WM_NCHITTEST | 단추 컨트롤이 그룹 상자인 경우 HTTRANSPARENT를 반환합니다. | ||||||||||||||||
WM_PAINT | 스타일과 현재 상태에 따라 단추를 그립니다. | ||||||||||||||||
WM_SETFOCUS | 포커스를 받는 단추에 포커스 사각형을 그립니다. 라디오 단추 및 자동 라디오 단추의 경우 부모 창에 BN_CLICKED 알림 코드가 전송됩니다. | ||||||||||||||||
WM_SETFONT | 새 글꼴을 설정하고 선택적으로 창을 업데이트합니다. | ||||||||||||||||
WM_SETTEXT | 단추의 텍스트를 설정합니다. 그룹 상자의 경우 새 텍스트로 그룹 상자를 다시 그리기 전에 기존 텍스트 위에 메시지가 그려집니다. | ||||||||||||||||
WM_SYSKEYUP | TAB 키를 제외한 모든 경우에 대해 마우스 캡처를 해제합니다. |
미리 정의된 창 프로시저는 기본 처리를 위해 다른 모든 메시지를 DefWindowProc 함수에 전달합니다.
관련 항목