2012-04-10 5 views
0

채우는 다른 창 내부에 창을 생성하고 항상 너비와 높이를 100 %로 유지하면서 항상 부모와 동일한 위치에 머물러있는 방법이 있습니까? 몇 마디로, 부모 창과 같은 크기와 움직임을 보이는 창을 만드십시오. 지금 나는이 있습니다C++ 다른 창 내부에 창 만들기

hWnd = CreateWindowEx(WS_EX_TOOLWINDOW,L"Class", L"Title",WS_VISIBLE | WS_POPUP, 
         0, 0, 0, 0,hParent, NULL, GetModuleHandle(NULL), NULL); 

내가 CallWndRetProc 내부 크기 변경 WM_SIZE 또는 WM_WINDOWPOSCHANGING을 확인하고 있습니다.

if(msg->message == WM_WINDOWPOSCHANGING && msg->hwnd == hParent){ 
    WINDOWPOS* pos = (WINDOWPOS*)msg->lParam; 
    SetWindowPos(hWnd, 0, pos->x, pos->y, pos->cx, pos->cy, SWP_NOACTIVATE); 
} 

그러나 문제가있다

, pos는 hParents 창에 상대 좌표하고을 SetWindowPos 전체 화면으로 위치를 설정합니다. 어쩌면 hPnd를 hParent와 동일한 위치에 유지하는 더 쉬운 방법이 있을까요?

+0

언제나 소원이있는 곳입니다. –

+1

그냥 WS_POPUP 대신 WS_CHILD 스타일 사용 – Flot2011

+0

두 창을 모두 만들었습니까? –

답변

1

GetWindowInfo()을 사용하여 창의 현재 화면 위치를 쿼리 할 수 ​​있습니다. 이것을 사용하여 상대 좌표에서 원하는 화면 위치를 계산할 수 있습니다.

+0

'GetWindowRect (hWnd, RECT); '를 사용하려고했지만 lParam 데이터를 사용하는 다른 트릭이 없습니까? EDIT : 어쩌면 부모 창 (SetWindowPos)에 상대적인 위치를 바꿀 수있는 창 만들기 스타일이 있습니까? – user1112008

+1

Flot2011이 댓글을 달았으므로'WS_CHILD'를 시도 할 수 있습니다. 그러나 그 의미에 익숙하지는 않습니다. – Attila

0

MapWindowPoint를 사용하여 한 좌표 집합에서 다른 좌표 집합으로 사각형을 변환 할 수 있습니다. 화면 공간에 부모 클라이언트 공간에서 이동하려면 다음을 사용하십시오

MapWindowPoints(hParent, NULL, &rect, 2); 

당신은 또한 쉽게 대신을 SetWindowPos보다 MoveWindow 사용하여 찾을 수 있습니다.