JHB의 프로그래밍 삽질기

[MFC] 아무리 봐도 햇깔리는 화면 좌표에 관련 한 것.. 본문

PROGRAMMING/Win/MFC

[MFC] 아무리 봐도 햇깔리는 화면 좌표에 관련 한 것..

roter 2011.10.17 11:19


GetWindowRect
GetClientRect
ScreenToClient
MoveWindow....등등등...

항상 복잡하다..
이제 SetWindowPos같은건 잘 안 쓰고 MoveWindow를 잘 쓰니깐 얘를 설명하면
0,0으로 이동 시키면 현재 프로그램의 최 좌측 상단에 달라 붙는 다는 것이다.
그리고 width랑 height까지 바꿔버리니까 주의해야 한다.

GetWindowRect를 하면 현재 화면 전체에서의 컨트롤 위치를 가져온다.
이놈을 이제 ScreenToClient 해주면 ('화면 전체'에서 '클라이언트의 좌표')로 바꿔주는 것이다.
즉 MoveWindow를 써줄려면 다음과 같은 순서로 진행해야한다.

CWnd* pObject = this->GetDlgItem( IDC_BUTTON1 );
 CRect rect;
 pObject->GetWindowRect( rect ); //윈도우 좌상단을 0, 0으로 해서 좌표 가져오기
 ScreenToClient( rect ); //가져온 좌표를, 프로그램의 좌 상단이 0, 0이 되도록 하는 좌표로 변경
 rect.top = rect.top + 4;
 rect.bottom = rect.bottom + 4;
 pObject->MoveWindow( rect, TRUE );

그렇다면 다음의 코드를 보자

CWnd* pObject = this->GetDlgItem( IDC_BUTTON1 );
 CRect rect1, rect2;
 pObject->GetClientRect( rect1 );
 ClientToScreen( rect1 );
 pObject->GetWindowRect( rect2 );

위 프로그램을 돌리고 나면 rect1과 rect2의 값은 같을까 다를까?
결과는.. 다르다 -.-
그래서 난... ClientToScreen은 뭘 어떻게 써먹는지 도저히 모르겠다......
아는 분 있으면 알려주시면 감사하겠습니다!!!
0 Comments
댓글쓰기 폼