2013-07-18 2 views
4
내가 MSDN에서 볼

, 그것은 말했다 :는 자식 창 Z-주문

생성 된 윈도우가 자식 창 인 경우, 기본 위치는 Z 순서의 맨 아래에 있습니다. 생성 된 창이 최상위 창인 경우 기본 위치는 Z 순서의 맨 위에 있지만 (생성 된 창이 그 자체가 최상위가 아닌 경우 모든 최상위 창 아래에 있음) (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632680(v=vs.85).aspx)

그러나, 다른 문서 상기 : 애플리케이션이 시스템이 동일한 유형 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms632599(v=vs.85).aspx)

의 창문 z 순서의 상단에 놓는다, 윈도우를 만들 때 내가

btn1 = ::CreateWindow(L"button", L"OK", WS_TABSTOP|BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD 
        , 10, 10, 50, 30, hWnd, (HMENU)51, hInst, NULL); 
btn2 = ::CreateWindow(L"button", L"Cancel", WS_TABSTOP|WS_CHILD|BS_PUSHBUTTON|WS_VISIBLE 
        , 20, 20, 70, 30, hWnd, (HMENU)52, hInst, NULL); 

새로운 생성 된 자식 창, 같은 시험으로 그리고 (예 : 나는 창에 두 개의 버튼을 생성하고이 겹쳐, 나중에 생성 버튼을 coveri 것을 볼 수 있습니다 첫 번째 단추 생성)

MSDN의 첫 번째 문구가 내 테스트와 모순 되는가?

답변

7

설명서가 정확합니다. 다른 문제가 발생하면 자식 창을 다른 자식 창으로 가져올 수 있습니다. 이제 그림 순서가 중요합니다.

WS_CLIPSIBLINGS 스타일 플래그를 CreateWindowEx 호출에 추가하여 문제를 해결할 수 있습니다. 이제을 참조하십시오. 확인 버튼이 위에 있습니다. 수정 :

btn1 = ::CreateWindow(L"button", L"OK", 
      WS_TABSTOP|BS_DEFPUSHBUTTON|WS_VISIBLE|WS_CHILD|WS_CLIPSIBLINGS, 
      10, 10, 50, 30, hWnd, (HMENU)51, hInst, NULL); 
// etc, use it as well on other child windows 
2

자식 창이 표시되는 방법과 마지막으로 표시되는 방법에 크게 의존해서는 안됩니다. 샘플 코드를 실행하면 취소 단추에 의해 겹쳐있는 확인 단추가 나타납니다. 마우스를 단추 위로 이동하면 확인 단추가 전경으로 나타나고 취소 단추가 그려집니다.

나는 겹치는 자식 컨트롤과 비슷한 문제가있었습니다. 그런 다음 마이크로 소프트가 Overlapping Controls Are Not Supported by Windows라고 밝혀졌습니다.

실제로, Z 순서를보고 싶다면 GetTopWindowGetNextWindow을 사용하십시오. 또는 더 간단한 방법 : Microsoft Spy++을 실행하십시오.