본문 바로가기
프로그래밍

👨‍💻 [MFC] 윈도우 컨트롤러에서 SetWindowPos 를 호출 했는데, 컨트롤러의 위치가 이동하지 않는 경우에는 어떻게 처리해야 하나요?

by 밝음의기둥 2025. 2. 14.
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."


👨‍💻 안녕하세요, 윌리 프로젝트의 윌리 입니다.

윈도우 컨트롤러에서 SetWindowPos 를 호출 했는데, 컨트롤러의 위치가 이동하지 않는 경우에는 어떻게 처리해야 하는지 간략히 알아보았습니다.


질문 >

윈도우 컨트롤러에서 SetWindowPos 를 호출 했는데, 컨트롤러의 위치가 이동하지 않는 경우에는 어떻게 처리해야 하나요?

답변 >

SetWindowPos를 호출했는데도 윈도우 컨트롤러의 위치가 이동하지 않는다면, 다음 사항들을 점검해보세요.


1. SWP_NOMOVE 플래그 확인

SetWindowPos를 호출할 때 SWP_NOMOVE 플래그가 포함되어 있으면 위치가 변경되지 않습니다.

👉 SWP_NOMOVE 플래그를 제거하세요.

SetWindowPos(hWnd, HWND_TOP, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);


2. 좌표 값 확인

윈도우 좌표가 예상과 다를 수 있으므로, GetWindowRect 또는 GetClientRect를 사용하여 현재 좌표를 확인하세요.

RECT rect;
GetWindowRect(hWnd, &rect);
printf("Current Position: (%d, %d)\\n", rect.left, rect.top);

혹시 같은 좌표를 다시 설정하고 있는지 확인하세요.


3. 부모 윈도우 여부 확인

컨트롤러가 자식 윈도우(WS_CHILD 스타일)라면, SetWindowPos의 좌표는 부모 윈도우의 클라이언트 영역 기준입니다.

👉 ScreenToClient를 사용하여 좌표를 변환하세요.

POINT pt = { x, y };
ScreenToClient(GetParent(hWnd), &pt);
SetWindowPos(hWnd, HWND_TOP, pt.x, pt.y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);


4. WM_WINDOWPOSCHANGING 또는 WM_WINDOWPOSCHANGED 처리 확인

윈도우 프로시저에서 WM_WINDOWPOSCHANGING 또는 WM_WINDOWPOSCHANGED를 처리할 때 좌표를 다시 설정하는 코드가 있는지 확인하세요.

case WM_WINDOWPOSCHANGING: {
    WINDOWPOS* pWP = (WINDOWPOS*)lParam;
    printf("WM_WINDOWPOSCHANGING: (%d, %d)\\n", pWP->x, pWP->y);
} break;

위 이벤트에서 pWP->x 또는 pWP->y가 변경되고 있다면, 특정 코드가 위치 변경을 방해하는 것일 수 있습니다.


5. SetWindowPos 호출 후 UpdateWindow 또는 RedrawWindow 호출

위치가 변경되었지만 화면에 즉시 반영되지 않을 수 있습니다.

👉 UpdateWindow 또는 RedrawWindow를 호출해 보세요.

SetWindowPos(hWnd, HWND_TOP, x, y, width, height, SWP_NOZORDER | SWP_NOACTIVATE);
UpdateWindow(hWnd);


6. MoveWindow 사용 시도

SetWindowPos가 작동하지 않으면 MoveWindow를 대신 사용해 보세요.

MoveWindow(hWnd, x, y, width, height, TRUE);


위 방법들을 하나씩 시도해 보고, 어떤 부분에서 문제가 발생하는지 확인해 보세요! 😊



🎬 유튜브 채널 🎬

 

위로그@WiLog

📢 안녕하세요, 위로그@WiLog 시청자 여러분, 저는 윌리(Willee) 입니다. 📢 위로그@WiLog 는 자기계발을 목적으로 하는 채널 입니다. 📢 오늘도 즐겁게~ 자신을 위한 계발을 함께 해보아요~ d^_^b 📌

www.youtube.com

🎬 치지직 채널 🎬

 

위로그 채널 - CHZZK

지금, 스트리밍이 시작됩니다. 치지직-

chzzk.naver.com


반응형