Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

Code Habit

WM_SYSCOMMAND 본문

카테고리 없음

WM_SYSCOMMAND

코드베어 2020. 1. 25. 10:17

시스템 메뉴에 있는 메뉴 항목을 선택하면 이 메시지가 전달된다. 시스템 메뉴를 직접 선택하는 동작 외에도 타이틀 바에 있는 최대, 최소, 닫기 버튼 등의 명령들도 이 메시지를 발생시킨다. 시스템 메뉴에 있는 명령들은 윈도우를 관리하기 위한 기본적인 명령이므로 응용 프로그램은 이 메시지를 직접 처리하지 않고 보통 DefWindowProc으로 그냥 보내 준다.

 

DefWindowProc은 wParam값에 따라 시스템에 미리 정의되어 있는 동작을 수행한다. 예를 들어 SC_MINIMIZE 시스템 명령이 전달되었으면 윈도우를 최소화하고 SC_CLOSE 명령이 전달되었으면 윈도우를 닫는다. 응용 프로그램이 직접 이 시스템 명령을 프로그래밍 하고 싶다면 이 메시지를 처리하며 처리한 시스템 명령은 DefWindowProc으로 보내지 말아야 한다. 그 외의 시스템 명령은 모두 DefWindowProc으로 보내 주어 디폴트 처리를 하도록 해야 한다.

 

응용 프로그램이 시스템 명령을 직접 실행할 필요가 있다면 wParam에 원하는 시스템 명령을 대입하고 DefWindowProc으로 WM_SYSCOMMAND를 보내 준다. 예를 들어 윈도우를 닫고 싶으면 SendMessage( hWnd, WM_SYSCOMMAND, SC_CLOSE, NULL ); 명령을 보내 주면 된다. 

 

wParam 으로 전달되는 명령의 종류

상수

설명

SC_CLOSE

0xF060

윈도우를 닫는다.

SC_CONTEXTHELP

0xF180

상황별 도움말 출력 상태가 되며 커서에 ?표시를 출력하고 사용자가 대화상자 컨트롤을 클릭하면 WM_HELP 메시지를 보낸다.

SC_DEFAULT

0xF160

디폴트 메뉴 항목을 선택했거나 시스템 메뉴를 더블클릭했다.

SC_HOTKEY

0xF150

응용 프로그램이 정의한 핫키로 윈도우를 활성화였다.

SC_HSCROLL

0xF080 수평으로 스크롤한다.

SC_KEYMENU

0xF100

키보드 입력으로 시스템 메뉴를 호출하였다. 보통 Alt+Space가 시스템 메뉴 출력키이다. 또는 Alt키와 단축키를 같이 누를 때도 이 명령이 전달되는데 이때 lParam은 단축키 문자값이 전달된다. 예를 들어 Alt+H를 누르면 lParam에는 'h'가 전달된다.

SC_MAXIMIZE

0xF030 윈도우를 최대화하였다.

SC_MINIMIZE

0xF020 윈도우를 최소화하였다.

SC_MONITORPOWER

0xF170 출력장치의 상태를 설정한다. 이 명령은 전원 절약 기능이 있는 컴퓨터의 전원 절약 기능을 지원한다. lParam이 1이면 저전력 상태가 된 것이며 2이면 전원이 차단된 것이다.

SC_MOUSEMENU

0xF090 마우스 클릭으로 시스템 메뉴를 출력하였다.

SC_MOVE

0xF010 이동 항목을 선택하여 윈도우를 이동시킨다.

SC_NEXTWINDOW

0xF040 다음 윈도우로 이동하였다.

SC_PREVWINDOW

0xF050 이전 윈도우로 이동하였다.

SC_RESTORE

0xF120 원래 위치로 복구하였다.

SC_SCREENSAVE

0xF140 시스템에 등록된 스크린 세이버를 실행한다.

SC_SIZE

0xF000 윈도우의 크기를 조정한다.

SC_TASKLIST

0xF130 시작 메뉴를 활성화한다.

SC_VSCROLL

0xF070 수직으로 스크롤한다.