2012-02-02 4 views
1

Ive는 부모 창의 오른쪽 하단 모서리에 배치 할 간단한 modless 대화 상자를 가지고 있습니다. 이것은 C로 윈도우 폼 작업을하는 것은 처음입니다 (직접 이해하지 못한다면 참을성있게하십시오).부모를 기준으로 창을 배치하십시오.

SetWindowPos으로 창을 포지 팅하려했지만 x 및 y 좌표가 왼쪽 상단 화면 모서리를 기준으로하므로 아무 소용이 없습니다.

//hWnd is the parent window 
hwndStatusBox = CreateDialog(hInst, MAKEINTRESOURCE(IDD_STATUSBOX), 
          hWnd, svnStatusBoxProc); 

SetWindowPos(hwndStatusBox,NULL, 100, 100, 0, 0, 
      SWP_SHOWWINDOW | SWP_NOSIZE | SWP_NOZORDER); 

기능이 누락되었거나 직접 오프셋을 계산해야합니까?

리소스에 정의 된 좌표를 사용하고 싶지 않습니다. 프로그래밍으로 해결하고자합니다.

+0

누군가가 코멘트없이을 downvoted, 그래서 보상을 upvote에거야 ... – Lundin

답변

3

최상위 창 (예 : 아동 창이 아닌 경우)의 좌표는 실제로 화면과 관련됩니다.

소유 윈도우의 좌표를 읽고, 필요한 오프셋을 조정하고, 오프셋에 추가하고, 마지막으로 화면 원점을 기준으로 대화 상자의 좌표를 설정해야합니다. 또는 ClientToScreen으로 전화하여 hWnd을 전달하고 시스템에서 처리하도록하십시오. 클라이언트가 화면 좌표를 좌표 변환

ClientToScreen 

:

+0

내가 배치 할 창은 아이입니다. 부모에게 상대성을 위치시키는 것이 불가능합니까? – SanBen

+0

[MSDN] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632679.aspx)에서 좌표에 대해 이렇게 말합니다. "자식 창에 대해 x는 부모 창의 클라이언트 영역의 왼쪽 위 모서리를 기준으로 한 창의 왼쪽 위 모서리 " 즉, 우리에게 말하는 것은 일관성이없는 것처럼 보입니다. 나는 그것이 정말로 어린 아이는 아닌지 의심 스럽다. 대화 상자는 최상위 창입니다. 그들은 아동용 창문이 아닙니다. –

+0

예 실제로 뭔가를 놓친 것 같아요 : P 창을 만드는 코드를 추가했는데 그 일을 제대로하고 있습니까? – SanBen

3

이 작업을 수행 할 수있는 기능이있다. 예를 들어 : -

message_box_position = {ParentWidth - MessageBoxWidth, ParentHeight - MessageBoxHeight} 
ClientToScreen (parent_window_handle, &message_box_position) 
SetWindowPos (message_box_handle, messahe_box_position) 
+0

-1 나는 그 반대를하려고합니다. 질문을 철저히 읽으십시오. – SanBen

+0

@ R34lthing 아니요, 이것이 바로 당신이하려는 일입니다. 소유하는 창의 클라이언트 영역에 상대적인 좌표를 지정하려고합니다. 하지만 최상위 대화 상자가 있기 때문에 화면 상대 좌표를 지정해야합니다. 그리고'ClientToScreen'은 그 변환을 수행 할 것입니다. 보상하려면 +1하십시오. –

+0

@DavidHeffernan 좋아, 나는 그것을 몰랐다. 그런 발진과 부적절한 대답에 사과드립니다. – SanBen

관련 문제