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 순서로 배치된 창 앞에 오는 창에 대한 핸들입니다. 이 매개 변수는 창 핸들이거나 다음 값 중 하나여야 합니다.
이 매개 변수를 사용하는 방법에 대한 자세한 내용은 다음 설명 섹션을 참조하세요.
[in] X
형식: int
클라이언트 좌표에서 창 왼쪽의 새 위치입니다.
[in] Y
형식: int
클라이언트 좌표에서 창 위쪽의 새 위치입니다.
[in] cx
형식: int
창의 새 너비(픽셀)입니다.
[in] cy
형식: int
창의 새 높이(픽셀)입니다.
[in] uFlags
형식: UINT
창 크기 조정 및 위치 지정 플래그입니다. 이 매개 변수는 다음 값의 조합일 수 있습니다.
값 | 의미 |
---|---|
|
호출 스레드와 창을 소유하는 스레드가 다른 입력 큐에 연결된 경우 시스템은 창을 소유한 스레드에 요청을 게시합니다. 이렇게 하면 다른 스레드가 요청을 처리하는 동안 호출 스레드가 실행을 차단하지 않습니다. |
|
WM_SYNCPAINT 메시지 생성을 방지합니다. |
|
창 주위에 프레임(창의 클래스 설명에 정의됨)을 그립니다. |
|
SetWindowLong 함수를 사용하여 새 프레임 스타일 집합을 적용합니다. 창의 크기가 변경되지 않더라도 창에 WM_NCCALCSIZE 메시지를 보냅니다. 이 플래그를 지정하지 않으면 창의 크기가 변경될 때만 WM_NCCALCSIZE 전송됩니다. |
|
창을 숨깁니다. |
|
창을 활성화하지 않습니다. 이 플래그를 설정하지 않으면 창이 활성화되고 hWndInsertAfter 매개 변수의 설정에 따라 맨 위 또는 맨 위 그룹이 아닌 그룹의 맨 위로 이동합니다. |
|
클라이언트 영역의 전체 콘텐츠를 삭제합니다. 이 플래그를 지정하지 않으면 창 크기가 조정되거나 위치가 변경된 후 클라이언트 영역의 유효한 내용이 저장되고 클라이언트 영역으로 다시 복사됩니다. |
|
현재 위치를 유지합니다( X 및 Y 매개 변수 무시). |
|
Z 순서에서 소유자 창의 위치를 변경하지 않습니다. |
|
변경 내용을 다시 그리지 않습니다. 이 플래그를 설정하면 어떤 종류의 다시 그리기도 발생하지 않습니다. 이는 클라이언트 영역, 비클라이언트 영역(제목 표시줄 및 스크롤 막대 포함) 및 창이 이동된 결과로 발견된 부모 창의 모든 부분에 적용됩니다. 이 플래그가 설정되면 애플리케이션은 다시 그리기가 필요한 창 및 부모 창의 모든 부분을 명시적으로 무효화하거나 다시 그려야 합니다. |
|
SWP_NOOWNERZORDER 플래그와 동일합니다. |
|
창이 WM_WINDOWPOSCHANGING 메시지를 받지 못하도록 합니다. |
|
현재 크기를 유지합니다( cx 및 cy 매개 변수 무시). |
|
현재 Z 순서를 유지합니다( hWndInsertAfter 매개 변수 무시). |
|
창을 표시합니다. |
반환 값
형식: 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_TOPMOST 및 HWND_NOTOPMOST 플래그가 지정되지 않습니다.
- hWnd로 식별된 창이 활성 창이 아닙니다.
맨 위 창이 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 도입) |
추가 정보
개념
참조