다음을 통해 공유


단추 메시지

단추는 부모 창에 메시지를 보낼 수 있고 부모 창은 단추에 메시지를 보낼 수 있습니다.

이 섹션에서 설명하는 항목은 다음과 같습니다.

단추에 메시지 보내기

부모 창은 SendMessage 함수를 사용하여 겹친 창 또는 자식 창의 단추에 메시지를 보낼 수 있거나, SendDlgItemMessage, CheckDlgButton, CheckRadioButtonIsDlgButtonChecked 함수를 사용하여 대화 상자의 단추에 메시지를 보낼 수 있습니다.

애플리케이션은 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_SETFOCUSBN_UNPUSHED 알림 코드를 보냅니다. BN_DBLCLK 알림 코드는 BS_USERBUTTON, BS_RADIOBUTTONBS_OWNERDRAW 단추에 대해 자동으로 전송됩니다. 다른 단추 형식은 BS_NOTIFY 스타일이 있는 경우에만 BN_DBLCLK를 보냅니다. 모든 단추는 단추 스타일에 관계없이 BN_CLICKED 알림 코드를 보냅니다.

자동 단추의 경우 시스템은 누름 상태를 변경하고 단추를 칠합니다. 이 경우 애플리케이션은 일반적으로 BN_CLICKEDBN_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_LBUTTONDOWNWM_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_PAINTWM_ENABLE 처리의 일부로 지워집니다.
WM_GETDLGCODE 다음 표와 같이 기본 단추 프로시저에서 처리하는 입력 형식을 나타내는 값을 반환합니다.
단추 스타일 반환
BS_AUTOCHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_AUTORADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON
BS_CHECKBOX DLGC_WANTCHARS | DLGC_BUTTON
BS_DEFPUSHBUTTON DLGC_DEFPUSHBUTTON | DLGC_BUTTON
BS_GROUPBOX DLGC_STATIC
BS_PUSHBUTTON DLGC_UNDEFPUSHBUTTON | DLGC_BUTTON
BS_RADIOBUTTON DLGC_RADIOBUTTON | DLGC_BUTTON

 

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 함수에 전달합니다.

컨트롤 메시지