WM_SIZE

인수

wParam : 윈도우의 크기가 변경된 이유와 유형값을 가진다. 다음 중 하나의 값이 전달된다.

설명
SIZE_MAXHIDE 다른 윈도우가 최대화될 때 모든 팝업 윈도우에게 전달된다.
SIZE_MAXIMIZED 윈도우가 최대화되었다.
SIZE_MAXSHOW 최대화되어 있던 윈도우가 복구될 때 모든 팝업 윈도우에게 전달된다.
SIZE_MINIMIZED 윈도우가 최소화되었다.
SIZE_RESTORED 윈도우의 크기가 변경되었다. 마우스로 경계선을 드래그하거나 시스템 메뉴의 크기 조정 항목으로 윈도우의 크기를 직접 변경할 때이다.

lParam : 윈도우의 작업 영역 크기이다. LOWORD(lParam)이 윈도우의 폭이며 HIWORD(lParam)이 윈도우의 높이이다. 윈도우의 폭과 높이는 32비트값으로 전달되지만 이 메시지로 전달되는 폭과 높이는 16비트 크기를 가진다.

설명

윈도우의 크기가 변경될 때 이 메시지가 보내진다. 사용자가 윈도우의 경계선을 드래그해서 직접 크기를 변경할 때는 물론이고 프로그램 내부에서 MoveWindow, SetWindowPos 등의 함수로 윈도우의 크기를 변경할 때도 이 메시지가 전달된다. 윈도우의 크기에 따라 작업영역의 출력 내용이 달라지거나 차일드 윈도우를 재배치해야 할 경우 이 메시지에서 처리한다.

리턴

이 메시지를 처리했으면 0을 리턴해야 한다.

예제

예제 1

다음 예제는 에디트 컨트롤을 생성하고 이 컨트롤을 작업영역에 가득 채운다. 최초 에디트 컨트롤의 좌표는 주어지지 않으며 WM_SIZE에서 작업영역 크기에 맞게 에디트 컨트롤의 위치와 크기를 재조정한다.

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	static HWND hEdit;

	switch(iMessage) {
	case WM_CREATE:
		hEdit=CreateWindow("edit",NULL,WS_CHILD | WS_VISIBLE | 
			ES_MULTILINE | WS_HSCROLL | WS_VSCROLL,
			0,0,0,0,hWnd,(HMENU)0,g_hInst,NULL);
		return 0;
	case WM_SIZE:
		MoveWindow(hEdit,0,0,LOWORD(lParam),HIWORD(lParam),TRUE);
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

메인 윈도우는 자신의 크기가 변경될 때 에디트 컨트롤을 재배치하며 이때 에디트 컨트롤로도 WM_SIZE가 전달된다. 에디트는 자신의 작업영역에 출력되어 있는 텍스트를 재배열한다. 이때 윈도우가 최소화될 때(SIZE_MINIMIZED)는 윈도우의 폭과 높이가 모두 0으로 설정되는데 만약 이 크기를 나눗셈에 사용하거나 기타 수식 계산에 사용할 경우는 최소화될 때를 제외하는 조건문이 필요하다.

 

플랫폼

95이상

참조

 


written by http://www.winapi.co.kr