WM_SYSCOMMAND 메시지

창은 사용자가 메뉴(이전의 시스템 또는 컨트롤 메뉴)에서 명령을 선택하거나 사용자가 최대화 단추, 최소화 단추, 복원 단추 또는 닫기 단추를 선택할 때 이 메시지를 받습니다.

#define WM_SYSCOMMAND                   0x0112

 case WM_SYSCOMMAND:
        if (wParam == 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, InsertMenuItemSetMenuItemInfo 함수를 사용하여 수정할 수 있습니다. 창 메뉴를 수정하는 애플리케이션은 WM_SYSCOMMAND 메시지를 처리해야 합니다.

애플리케이션은 WM_SYSCOMMAND 메시지를 DefWindowProc에 전달하여 언제든지 시스템 명령을 수행할 수 있습니다. 애플리케이션에서 처리하지 않는 WM_SYSCOMMAND 메시지는 DefWindowProc에 전달되어야 합니다. 애플리케이션에서 추가한 명령 값은 애플리케이션에서 처리해야 하며 DefWindowProc에 전달할 수 없습니다.

정책에서 암호 보호를 사용하도록 설정하면 애플리케이션이 SC_SCREENSAVE 알림으로 수행하는 작업과 관계없이 화면 보호기가 시작됩니다.이 알림은 DefWindowProc에 전달하지 못하더라도 시작됩니다.

창 메뉴에서 항목을 선택하도록 정의된 가속기 키는 WM_SYSCOMMAND 메시지로 변환됩니다. 다른 모든 가속기 키 입력은 WM_COMMAND 메시지로 변환됩니다.

wParamSC_KEYMENU 경우 lParam은 ALT 키와 함께 팝업 메뉴를 표시하는 데 사용되는 키의 문자 코드를 포함합니다. 예를 들어 Alt+F를 눌러 파일 팝업을 표시하면 wParamSC_KEYMENU 같고 lParam이 'f'와 같은 WM_SYSCOMMAND 발생합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Winuser.h(Windows.h 포함)

추가 정보

참조

AppendMenu

DefWindowProc

GET_X_LPARAM

GET_Y_LPARAM

GetSystemMenu

InsertMenu

ModifyMenu

WM_COMMAND

개념

바로 가기 키