단추 메시지
단추는 부모 창에 메시지를 보낼 수 있으며 부모 창은 단추로 메시지를 보낼 수 있습니다.
이 섹션에서는 다음 항목에 대해 설명합니다.
단추로 메시지 보내기
부모 창은 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 함수에 전달합니다.
관련 항목
-
메시지 제어