오늘은 SetWindowPos에 대해 알아보겠습니다.
SetWindowPos는 HWND의 (X, Y) 좌표, 가로 세로 길이, 그리고 Z-Order를 변경할 수 있는 함수 입니다.
함수 원형은 아래와 같습니다.
BOOL SetWindowPos(
HWND hWnd, // 조작할 핸들
HWND hWndInsertAfter, // z순서상 조작할 핸들의 앞에 올 핸들
int X, // x좌표
int Y, // y좌표
int cx, // 가로
int cy, // 세로
UINT uFlags // 플래그
);
HWND hWndInsertAfter에는 핸들 혹은 아래 값이 올 수 있습니다.
사용 | 값 | 의미 |
HWND_BOTTOM | (HWND) 1 | Z 순서의 맨 아래에 창을 놓습니다. 는 IF HWND의 매개 변수는 최상위 창을 식별, 창은 맨 위의 지위를 잃고 다른 모든 창 하단에 배치됩니다. |
HWND_NOTOPMOST | (HWND) -2 | 맨 위가 아닌 모든 창 위에 (즉, 맨 위에있는 모든 창 뒤에) 창을 놓습니다. 윈도우가 이미 최상단이 아닌 윈도우 인 경우에는이 플래그가 적용되지 않습니다. |
HWND_TOP | (HWND) 0 | Z 순서의 맨 위에 창을 놓습니다. |
HWND_TOPMOST | (HWND) -1 | 맨 위가 아닌 모든 창 위에 창을 놓습니다. 창은 비활성화되어 있어도 최상위 위치를 유지합니다. |
마지막 인자 UINT uFlags에는 아래 값이 올 수 있습니다.(대표적인 것들만 추렸습니다.)
사용 | 값 | 의미 |
SWP_HIDEWINDOW | 0x0080 | 창을 숨 깁니다. |
SWP_NOACTIVATE | 0x0010 | 창을 활성화하지 않습니다. 이 플래그를 설정하지 않으면 창이 활성화되고 hWndInsertAfter 매개 변수 의 설정에 따라 최상위 또는 최상위가 아닌 그룹의 맨 위로 이동합니다 . |
SWP_NOMOVE | 0x0002 | 현재 위치를 유지합니다 ( X 및 Y 매개 변수 무시 ). |
SWP_NOOWNERZORDER | 0x0200 | Z 순서에서 소유자 창의 위치를 변경하지 않습니다. |
SWP_NOREDRAW | 0x0008 | 변경 사항을 다시 그리지 않습니다. |
SWP_NOSIZE | 0x0001 | 현재 크기를 유지합니다 ( cx 및 cy 매개 변수 무시 ). |
SWP_NOZORDER | 0x0004 | 현재 Z 순서를 유지합니다 ( hWndInsertAfter 매개 변수 는 무시 함 ). |
SWP_SHOWWINDOW | 0x0040 | 창을 표시합니다. |
사용 방법은 아래와 같습니다.
::SetWindowPos( hwndTarget, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVE | SWP_NOMOVE | SWP_NOSIZE | SWP_NOREDRAW );
::SetWindowPos( hwndTarget, hwndAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOREDRAW );
::SetWindowPos( hwndTarget, HWND_TOPMOST, 100, 300, 1920, 1080, SWP_NOREDRAW );
::SetWindowPos( hwndTarget, HWND_TOPMOST, 300, 300, 0, 0, SWP_NOMOVE | SWP_NOREDRAW | SWP_NOZORDER );
Z-Order의 개념은 여기를 참고해주세요