본문 바로가기

Robotics/Software Tech.

[MFC Tip] 화면보호기 실행 방법

MFC에서 윈도우 화면보호기를 실행하는 방법입니다.

GetDesktopWindow()->PostMessage(WM_SYSCOMMAND, SC_SCREENSAVE, 0L);

[설명]
현재 데스크탑의 윈도우 포인터를 얻어오고, 그 윈도우에 시스템에 등록된 스크린 세이버를 실행하라는 명령을 전송한다.

 

CWnd::GetDesktopWindow 

static CWnd* PASCAL GetDesktopWindow( );

Return Value

Identifies the Windows desktop window. This pointer may be temporary and should not be stored for later use.

Remarks

Returns the Windows desktop window. The desktop window covers the entire screen and is the area on top of which all icons and other windows are painted.

설명

데스크탑 윈도우의 포인터를 얻는 함수. 현재 데스크탑 윈도우의 포인터를 얻는다.




 

CWnd::PostMessage

BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );

Return Value

Nonzero if the message is posted; otherwise 0.

Parameters

message

Specifies the message to be posted.

wParam

Specifies additional message information. The content of this parameter depends on the message being posted.

lParam

Specifies additional message information. The content of this parameter depends on the message being posted.

설명

메세지를 전송한다.


WM_SYSCOMMAND

인수

wParam : 시스템 명령의 종류가 전달되며 사용자가 시스템 메뉴에서 어떤 항목을 선택했는지를 알 수 있다. 이 값의 하위 4비트는 시스템이 내부적으로 사용하는 값이므로 명령의 종류를 알고 싶으면 wParam을 0xFFF0와 AND연산해야 한다. 연산한 결과는 다음값 중의 하나가 된다.

상수

설명

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 수직으로 스크롤한다.

각 값들은 해당 명령이 선택되었다는 뜻이지 이미 실행되었다는 뜻이 아니다. 예를 들어 사용자가 시스템 메뉴에서 '이동'항목을 선택하면 SC_MOVE가 전달되는데 이때는 아직 이동을 시작하지 않은 상태이다.

lParam : 마우스로 윈도우 메뉴를 선택한 경우 커서의 좌표가 전달된다. 하위 워드에는 수평 좌표, 상위 워드에는 수직 좌표가 전달되는데 이 좌표는 화면 기준 좌표이다. 액셀러레이터에 의해 명령이 선택되었으면 -1이 되며 니모닉에 의해 선택되었으면 0이 된다.

설명

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

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

시스템 메뉴에는 이동, 최소화, 최대화, 크기 조정, 닫기 등의 표준 윈도우 관리 명령들만 들어 있다. GetSystemMenu, AppendMenu 등의 메뉴 관련 명령을 사용하면 시스템 메뉴에도 응용 프로그램 고유의 메뉴 항목을 추가할 수 있다. 이렇게 만들어진 메뉴 항목을 선택할 때는 WM_COMMAND 대신 WM_SYSCOMMAND 메시지가 대신 전달되므로 반드시 이 메시지를 처리해야 한다. 이 경우 직접 추가한 메뉴 항목 외의 시스템 명령은 모두 DefWindowProc으로 전달해 주어야 한다.

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

'Robotics > Software Tech.' 카테고리의 다른 글

MFC 샘플 소스코드  (0) 2007.09.20
메세지 펌프(Message Pump)  (0) 2007.09.08
SOAP에 대해서.  (0) 2007.09.06
SOAP(Simple Object Access Protocol)  (0) 2007.09.06
CString to Hex Decimal  (1) 2007.09.06