WM_SYSCOMMAND 메시지
창은 사용자가 창 메뉴(이전의 시스템 또는 컨트롤 메뉴)에서 명령을 선택하거나 사용자가 최대화 단추, 최소화 단추, 복원 단추 또는 닫기 단추를 선택할 때 이 메시지를 받습니다.
#define WM_SYSCOMMAND 0x0112
예
case WM_SYSCOMMAND:
if ((wParam & 0xFFF0) == SC_CLOSE)
{
EndDialog (hDlg, TRUE);
return(TRUE);
}
break;
GitHub의 Windows 클래식 샘플 예제입니다.
매개 변수
-
wParam
-
요청된 시스템 명령의 유형입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.
값 의미 - SC_CLOSE
- 0xF060
창을 닫습니다. - SC_CONTEXTHELP
- 0xF180
포인터를 사용하여 커서를 물음표로 변경합니다. 그런 다음 사용자가 대화 상자에서 컨트롤을 클릭하면 컨트롤이 WM_HELP 메시지를 받습니다. - SC_DEFAULT
- 0xF160
기본 항목을 선택합니다. 사용자가 창 메뉴를 두 번 클릭합니다. - SC_HOTKEY
- 0xF150
애플리케이션에서 지정한 핫 키와 연결된 창을 활성화합니다. lParam 매개 변수는 활성화할 창을 식별합니다. - SC_HSCROLL
- 0xF080
가로로 스크롤합니다. - SCF_ISSECURE
- 0x00000001
화면 보호기가 안전한지 여부를 나타냅니다. - SC_KEYMENU
- 0xF100
키 입력의 결과로 창 메뉴를 검색합니다. 자세한 내용은 주의 섹션을 참조하세요. - SC_MAXIMIZE
- 0xF030
창을 최대화합니다. - SC_MINIMIZE
- 0xF020
창을 최소화합니다. - SC_MONITORPOWER
- 0xF170
디스플레이의 상태를 설정합니다. 이 명령은 배터리 구동 개인용 컴퓨터와 같은 절전 기능이 있는 디바이스를 지원합니다.
lParam 매개 변수에는 다음 값이 있을 수 있습니다.- -1(디스플레이 전원 켜기)
- 1(디스플레이가 저전력으로 진행됨)
- 2(디스플레이가 차단됨)
- SC_MOUSEMENU
- 0xF090
마우스 클릭의 결과로 창 메뉴를 검색합니다. - SC_MOVE
- 0xF010
창을 이동합니다. - SC_NEXTWINDOW
- 0xF040
다음 창으로 이동합니다. - SC_PREVWINDOW
- 0xF050
이전 창으로 이동합니다. - SC_RESTORE
- 0xF120
창을 정상 위치 및 크기로 복원합니다. - SC_SCREENSAVE
- 0xF140
System.ini 파일의 [부팅] 섹션에 지정된 화면 보호기 애플리케이션을 실행합니다. - SC_SIZE
- 0xF000
창 크기를 조정합니다. - SC_TASKLIST
- 0xF130
시작 메뉴를 활성화합니다. - SC_VSCROLL
- 0xF070
세로로 스크롤합니다. -
lParam
-
창 메뉴 명령이 마우스로 선택된 경우 낮은 순서의 단어는 화면 좌표로 커서의 가로 위치를 지정합니다. 그렇지 않으면 이 매개 변수가 사용되지 않습니다.
창 메뉴 명령이 마우스로 선택된 경우 상위 단어는 화면 좌표로 커서의 세로 위치를 지정합니다. 이 매개 변수는 시스템 가속기를 사용하여 명령을 선택한 경우 1이거나 니모닉을 사용하는 경우 0입니다.
반환 값
애플리케이션은 이 메시지를 처리하는 경우 0를 반환해야 합니다.
설명
화면 좌표에서 위치 좌표를 가져오려면 다음 코드를 사용합니다.
xPos = GET_X_LPARAM(lParam); // horizontal position
yPos = GET_Y_LPARAM(lParam); // vertical position
DefWindowProc 함수는 이전 표에 지정된 미리 정의된 작업에 대한 창 메뉴 요청을 수행합니다.
WM_SYSCOMMAND 메시지에서 wParam 매개 변수의 4개의 하위 비트는 시스템에서 내부적으로 사용됩니다. wParam 값을 테스트할 때 올바른 결과를 얻으려면 애플리케이션은 비트 AND 연산자를 사용하여 0xFFF0 값을 wParam 값과 결합해야 합니다.
창 메뉴의 메뉴 항목은 GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem 및 SetMenuItemInfo 함수를 사용하여 수정할 수 있습니다. 창 메뉴를 수정하는 애플리케이션은 WM_SYSCOMMAND 메시지를 처리해야 합니다.
애플리케이션은 WM_SYSCOMMAND 메시지를 DefWindowProc에 전달하여 언제든지 시스템 명령을 수행할 수 있습니다. 애플리케이션에서 처리하지 않는 WM_SYSCOMMAND 메시지는 DefWindowProc에 전달되어야 합니다. 애플리케이션에서 추가한 명령 값은 애플리케이션에서 처리해야 하며 DefWindowProc에 전달할 수 없습니다.
정책에서 암호 보호를 사용하도록 설정하면 애플리케이션이 SC_SCREENSAVE 알림으로 수행하는 작업과 관계없이 화면 보호기가 시작됩니다.이 알림은 DefWindowProc에 전달하지 못하더라도 시작됩니다.
창 메뉴에서 항목을 선택하도록 정의된 가속기 키는 WM_SYSCOMMAND 메시지로 변환됩니다. 다른 모든 가속기 키 입력은 WM_COMMAND 메시지로 변환됩니다.
wParam이 SC_KEYMENU 경우 lParam은 ALT 키와 함께 팝업 메뉴를 표시하는 데 사용되는 키의 문자 코드를 포함합니다. 예를 들어 Alt+F를 눌러 파일 팝업을 표시하면 wParam이 SC_KEYMENU 같고 lParam이 'f'와 같은 WM_SYSCOMMAND 발생합니다.
요구 사항
요구 사항 | 값 |
---|---|
지원되는 최소 클라이언트 |
Windows 2000 Professional[데스크톱 앱만] |
지원되는 최소 서버 |
Windows 2000 Server[데스크톱 앱만] |
헤더 |
|