SetWindowPos 함수(winuser.h)

자식, 팝업 또는 최상위 창의 크기, 위치 및 Z 순서를 변경합니다. 이러한 창은 화면의 모양에 따라 정렬됩니다. 맨 위 창은 가장 높은 순위를 받고 Z 순서의 첫 번째 창입니다.

구문

BOOL SetWindowPos(
  [in]           HWND hWnd,
  [in, optional] HWND hWndInsertAfter,
  [in]           int  X,
  [in]           int  Y,
  [in]           int  cx,
  [in]           int  cy,
  [in]           UINT uFlags
);

매개 변수

[in] hWnd

형식: HWND

창에 대한 핸들입니다.

[in, optional] hWndInsertAfter

형식: HWND

Z 순서로 배치된 창 앞에 오는 창에 대한 핸들입니다. 이 매개 변수는 창 핸들이거나 다음 값 중 하나여야 합니다.

의미
HWND_BOTTOM
(HWND)1
Z 순서의 맨 아래에 있는 창을 Places. hWnd 매개 변수가 맨 위 창을 식별하는 경우 창의 맨 위 상태 손실되고 다른 모든 창의 맨 아래에 배치됩니다.
HWND_NOTOPMOST
(HWND)-2
맨 위가 아닌 모든 창 위에 창을 Places. 즉, 맨 위 창 뒤에 있습니다. 창이 이미 맨 위가 아닌 창인 경우에는 이 플래그가 적용되지 않습니다.
HWND_TOP
(HWND)0
Z 순서의 맨 위에 있는 창을 Places.
HWND_TOPMOST
(HWND)-1
맨 위가 아닌 모든 창 위에 창을 Places. 창은 비활성화된 경우에도 맨 위 위치를 유지합니다.
 

이 매개 변수를 사용하는 방법에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.

[in] X

형식: int

클라이언트 좌표에서 창 왼쪽의 새 위치입니다.

[in] Y

형식: int

클라이언트 좌표에서 창 위쪽의 새 위치입니다.

[in] cx

형식: int

창의 새 너비(픽셀)입니다.

[in] cy

형식: int

창의 새 높이(픽셀)입니다.

[in] uFlags

형식: UINT

창 크기 조정 및 위치 지정 플래그입니다. 이 매개 변수는 다음 값의 조합일 수 있습니다.

의미
SWP_ASYNCWINDOWPOS
0x4000
호출 스레드와 창을 소유하는 스레드가 다른 입력 큐에 연결된 경우 시스템은 창을 소유한 스레드에 요청을 게시합니다. 이렇게 하면 다른 스레드가 요청을 처리하는 동안 호출 스레드가 실행을 차단하지 않습니다.
SWP_DEFERERASE
0x2000
WM_SYNCPAINT 메시지 생성을 방지합니다.
SWP_DRAWFRAME
0x0020
창 주위에 프레임(창의 클래스 설명에 정의됨)을 그립니다.
SWP_FRAMECHANGED
0x0020
SetWindowLong 함수를 사용하여 새 프레임 스타일 집합을 적용합니다. 창의 크기가 변경되지 않더라도 창에 WM_NCCALCSIZE 메시지를 보냅니다. 이 플래그를 지정하지 않으면 창의 크기가 변경될 때만 WM_NCCALCSIZE 전송됩니다.
SWP_HIDEWINDOW
0x0080
창을 숨깁니다.
SWP_NOACTIVATE
0x0010
창을 활성화하지 않습니다. 이 플래그를 설정하지 않으면 창이 활성화되고 hWndInsertAfter 매개 변수의 설정에 따라 맨 위 또는 맨 위 그룹이 아닌 그룹의 맨 위로 이동합니다.
SWP_NOCOPYBITS
0x0100
클라이언트 영역의 전체 콘텐츠를 삭제합니다. 이 플래그를 지정하지 않으면 창 크기가 조정되거나 위치가 변경된 후 클라이언트 영역의 유효한 내용이 저장되고 클라이언트 영역으로 다시 복사됩니다.
SWP_NOMOVE
0x0002
현재 위치를 유지합니다( XY 매개 변수 무시).
SWP_NOOWNERZORDER
0x0200
Z 순서에서 소유자 창의 위치를 변경하지 않습니다.
SWP_NOREDRAW
0x0008
변경 내용을 다시 그리지 않습니다. 이 플래그를 설정하면 어떤 종류의 다시 그리기도 발생하지 않습니다. 이는 클라이언트 영역, 비클라이언트 영역(제목 표시줄 및 스크롤 막대 포함) 및 창이 이동된 결과로 발견된 부모 창의 모든 부분에 적용됩니다. 이 플래그가 설정되면 애플리케이션은 다시 그리기가 필요한 창 및 부모 창의 모든 부분을 명시적으로 무효화하거나 다시 그려야 합니다.
SWP_NOREPOSITION
0x0200
SWP_NOOWNERZORDER 플래그와 동일합니다.
SWP_NOSENDCHANGING
0x0400
창이 WM_WINDOWPOSCHANGING 메시지를 받지 못하도록 합니다.
SWP_NOSIZE
0x0001
현재 크기를 유지합니다( cxcy 매개 변수 무시).
SWP_NOZORDER
0x0004
현재 Z 순서를 유지합니다( hWndInsertAfter 매개 변수 무시).
SWP_SHOWWINDOW
0x0040
창을 표시합니다.

반환 값

형식: BOOL

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

Vista 다시 아키텍처의 일부로 모든 서비스가 대화형 데스크톱에서 세션 0으로 이동되었습니다. hwnd 및 창 관리자 작업은 세션 내에서만 유효하며 hwnd를 조작하려는 세션 간 시도는 실패합니다. 자세한 내용은 Windows Vista 개발자 스토리: 애플리케이션 호환성 쿡북을 참조하세요.

SetWindowLong을 사용하여 특정 창 데이터를 변경한 경우 변경 내용을 적용하려면 SetWindowPos를 호출해야 합니다. uFlags에 다음 조합을 사용합니다. SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED

hWndInsertAfter 매개 변수를 HWND_TOPMOST 설정하고 SWP_NOZORDER 플래그가 설정되지 않도록 하거나 Z 순서에서 창의 위치를 설정하여 기존 맨 위 창 위에 있도록 창을 맨 위로 만들 수 있습니다. 맨 위가 아닌 창이 맨 위로 만들어지면 소유 창도 맨 위로 만들어집니다. 그러나 소유자는 변경되지 않습니다.

SWP_NOACTIVATE 또는 SWP_NOZORDER 플래그가 지정되지 않은 경우(즉, 애플리케이션이 창을 동시에 활성화하고 Z 순서의 위치가 변경되도록 요청할 때) hWndInsertAfter에 지정된 값은 다음 상황에서만 사용됩니다.

  • hWndInsertAfter에는 HWND_TOPMOSTHWND_NOTOPMOST 플래그가 지정되지 않습니다.
  • hWnd로 식별된 창이 활성 창이 아닙니다.
애플리케이션은 비활성 창을 Z 순서의 맨 위로 가져오지 않고는 활성화할 수 없습니다. 애플리케이션은 제한 없이 Z 순서에서 활성화된 창의 위치를 변경하거나 창을 활성화한 다음 맨 위 또는 맨 위가 아닌 창의 맨 위로 이동할 수 있습니다.

맨 위 창이 Z 순서의 아래쪽(HWND_BOTTOM)으로 위치가 변경되거나 맨 위가 아닌 창 다음에 위치가 변경되면 더 이상 맨 위 창이 아닙니다. 맨 위 창이 맨 위가 아닌 창으로 만들어지면 소유자와 소유 창도 맨 위가 아닌 창으로 만들어집니다.

맨 위가 아닌 창은 맨 위 창을 소유할 수 있지만 반대의 경우는 발생할 수 없습니다. 맨 위 창이 소유한 모든 창(예: 대화 상자)은 소유된 모든 창이 소유자 위에 유지되도록 맨 위 창이 됩니다.

애플리케이션이 포그라운드에 있지 않고 포그라운드에 있어야 하는 경우 SetForegroundWindow 함수를 호출해야 합니다.

SetWindowPos를 사용하여 창을 맨 위로 가져오려면 창을 소유하는 프로세스에 SetForegroundWindow 권한이 있어야 합니다.

예제

예를 들어 대화 상자 초기화를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll
API 세트 ext-ms-win-ntuser-window-l1-1-0(Windows 8 도입)

추가 정보

개념

MoveWindow

참조

SetActiveWindow

SetForegroundWindow

Windows