2009-10-09 4 views
28

BringWindowToTop, SetForegroundWindow, SwitchToThisWindow, SetWindowPos, ShowWindow은 모두 윈도우를 보여주고 활성화하는 것으로 설명됩니다.BringWindowToTop, SetForegroundwindow, SetWindowPos 등의 차이점은 무엇입니까?

실제 차이점은 무엇입니까? 언제 BringWindowToTopSetForegroundWindow 또는 SwitchToThisWindow 또는 SetWindowPos으로 설정하고 플래그를 활성화하고 표시하도록 설정해야합니까?

답변

26

많은 밀접하게 관련된 개념이 관련되어 있으며 관련 용어가 공식 문서에서도 종종 잘못 사용되고 있습니다. 창

중요 유형 :

  • 최상위 창 : 윈도우 부모 윈도우가 없습니다. 응용 프로그램의 기본 창은 거의 항상 최상위 창입니다. 그것은 z 순서와 관련이 없습니다.

  • 하위 창 : 부모 창에 포함 된 Windows. 그들의 위치는 항상 부모 미망인의 영역과 관련이 있습니다. 하위 창은 종종 "컨트롤"입니다 : 버튼과 편집 상자 같은 UI 요소.

  • 부모 창 : 자식 창이있는 창. 최상위 창에는 종종 자식이 있습니다. 그러나 자식 창에는 자식이있을 수 있으므로 부모 창과 자식 창이 될 수 있습니다.

  • 소유 한 창문 : 다른 창에 의해 제어되지만 다른 창의 하위 항목 일 필요는 없습니다. 예를 들어 부동 도구 팔레트가 있습니다 : 응용 프로그램의 다른 윈도우가 소유하고 있지만 다른 윈도우의 영역에는 고정되어 있지 않습니다.

  • 소유자 윈도우 : 소유 한 윈도우를 소유 한 Windows.

종종 소유자/소유 관계 및 부모/자식 관계의 차이는 중요하지 않습니다, 그래서 부모와 자식 용어는 종종 심지어 설명서에 모두 컨텍스트에 사용됩니다. 경우에 따라 상위 필드 및 매개 변수가 부모 및/또는 소유자를 의미하도록 오버로드됩니다.

중요한 개념이 그대로 다른 창 위에 표시하는 창을 의미 Z 순서의

  • 최고.

  • 활성 창 : 퍼지 개념이지만 일반적으로 사용자가 "현재"창을 고려하는 최상위 창을 의미합니다. 활성 창은 일반적으로 고유 한 테두리로 그려지고 작업 표시 줄의 해당 타일이 강조 표시됩니다. 활성 창은 일반적으로 다른 모든 최상위 창 중 z 순서의 맨 위 또는 그 근처에 있으며 키보드 포커스가있는 창의 부모 또는 소유자 (간접적 인 경우도 있음)입니다.

  • 키보드 포커스 : 키보드 메시지를 수신하는 창을 나타냅니다. 개념적으로 키보드 포커스가있는 창이 하나 있습니다. 종종 포커스가있는 창은 활성 창의 자식 (또는 손자 등)입니다.

  • 전경 : 활성 창이 일반적으로 전경에 있습니다. 이름은 z 순서의 최상위에 있음을 암시하는 것처럼 보이지만 실제로는 창을 만든 스레드가 약간의 우선 순위를 높이는 것을 의미합니다. 활성 창은 대개 포 그라운드 창입니다.

브라우저 창을 열고 메모장 실행 인스턴스가 있다고 가정 해 보겠습니다. 메모장에서 문서를 클릭하면 전체 메시지 및 상태 변경이 발생합니다. 메모장의 최상위 창 하위 창인 큰 편집 상자를 실제로 클릭하고 있습니다. 클릭하면 편집 상자가 활성화되지만 하위 창은 실제로 "활성"창이 아니므로 키보드 초점을 가져 와서 활성 메시지가 최상위 창에 도달 할 때까지 조상을 통해 활성화 메시지를 전달합니다. 최상위 창은 z 순서의 맨 위로 이동하고 테두리를 강조 표시하여 "활성화"합니다. 또한 전경 창이되어 스레드가 UI를 조금만 더 응답하게 만듭니다 창문.

이러한 용어를 염두에두고 나열된 기능에 대한 MSDN 설명을 구문 분석하여 미묘한 차이점을 알 수 있습니다.

창 자식을 배치하려면 SetWindowPos (또는 MoveWindow, SizeWindow 및 ShowWinow)를 사용하십시오. 나머지 함수 중 SwitchToThisWindow는 더 이상 사용되지 않으며 기본적으로 SetForegroundWindow와 같습니다. (대부분의 경우 SetForegroundWindow는 활성 응용 프로그램이나 활성 응용 프로그램이 사용 권한을 부여하지 않는 한 원하는 작업을 수행하지 않습니다. BringWindowToTop은 주로 윈도우를 z- 순서 (SetWindowPos로 할 수있는), 부작용이 추가되어 최상위 창에서 SetForegroundWindow를 호출하면 SetForegroundWindow처럼 작동합니다.

업데이트 : 레이몬드 첸 (Raymond Chen)은 clearer distinction between the active window and the foreground window을 게시했습니다. 인용 : 로컬 활성 창을 참조 계속

입력이 "정말 글로벌 활성 창"을 표현하기 위해 desynchronized 때 SetActiveWindow 반대로 전경 윈도우의 개념이 도입되었다.

3

사용 setwindowpos 당신이 창의 크기를 변경해야하는 경우 (단지 상태)

사용 showwindow이 아이를 통해 부모 창을 활성화하기 위해 창

사용 bringwindowtotop 단지 상태를 변경하려면 . 자식 창 (아마도 떠 다니는 도구 모음)을 보내면 부모는 앞쪽으로 가져와 자식 대신 초점을 갖게됩니다.

그들은 모두 자신의 위치를 ​​가지고 분명히 중복 기능을 가지고 있지만, 당신이하고 싶은 일에 따라 조금씩 다릅니다.

관련 문제