나는 Owned windows과 그 소유자 사이의 계약에 대해 알고 소유자가 숨겨지면 소유 윈도우가 숨겨져 있음을 알고 있습니다. 이것은 실제로 내가 원하는 것입니다. 문제는 이후에 소유 윈도우를 표시하면 소유자 윈도우가 최소화 된 다음 소유 윈도우가 숨겨지지 않고 화면에 정상적으로 표시된다는 것입니다. 이 경우 Window의 WindowState가 시작될 때 최소화되어 표시되는 소유 된 창이 화면에 표시됩니다.소유자가 최소화 된 후 소유 된 창을 숨기는 방법은 무엇입니까?
ShowOwnedPopups을 호출하여 OS가 모든 소유 된 창을 숨기도록 할 수 있음을 알고 있지만 소유 된 창이 실제로 표시되어 화면에 깜박임이 발생하는 경우에만 작동하는 것으로 보입니다. 윈도우를 명시 적으로 숨기려고했으나 (예 : WS_VISIBLE 비트 삭제 또는 WM_SHOWCOMMAND를 숨김으로 변경하려고 시도) 소유자가 복원 될 때 소유 윈도우가 표시되지 않습니다. 이는 ShowOwnedPopups API에 대한 문서와 일치하므로 표시되는 유일한 창은 ShowOwnedPopups 호출에 의해 숨겨진 창입니다.
그래서 OS를 소유자에게 복원 될 때까지 최종 사용자에게 표시되지 않도록하는 방법으로 창을 표시하도록하는 방법을 찾고 있습니다. - 또는 -에 플래그를 설정하는 방법 윈도우가 ShowOwnedPopups를 사용하여 윈도우를 숨겼다 고 OS가 생각한 다음 수동으로 윈도우를 숨기고 그 플래그를 설정합니다.
소유 된 창을 표시하는 코드는 셸과 연결되지 않으므로 소유자가 복원 될 때까지 소유 된 창을 표시하지 않는 것이 중요합니다. 이것은 별도의 사용자 정의 컨트롤의 일부이며이 경우에는 WPF 컨트롤이기 때문에 ElementHost에서 컨트롤을 사용할 수도 있습니다. 따라서 소유 윈도우의 WindowState도 볼 수 없습니다. 모든 Windows API 솔루션을 비록 환영합니다.
소유자가 최소화 된 후 소유 된 창이 어떻게 표시됩니까? 작업 표시 줄에서 소유 된 창을 클릭 하시겠습니까? 요구 사항이 아니라면 작업 표시 줄에서 창을 숨길 수 있습니다. 그래서 소유 된 윈도우를 보여주는 것은 사용자가 훨씬 더 어려워집니다. 당신의 사건을 설명하십시오. –
이 특별한 경우에 쇼는 "자동"입니다. 컨트롤은 소유 된 일부 창을 표시하는 것을 포함하여 이전 상태로 복원 중입니다. 따라서 사용자는 내 컨트롤을 창에 둡니다. 윈도우의 WindowState가 최소화로 설정됩니다. 윈도우가로드되면 OS에 의해 "최소화 된 상태"로 표시되고 컨트롤이 초기화 /로드되면 이전 상태로 복원되고 마지막으로 컨트롤이 표시되는 소유 윈도우를 표시하려고하는 일부분으로 익숙한. – AndrewS
BTW 내가 의미하는 간단한 예제를 보려면 WPF 응용 프로그램을 만듭니다. 생성 한 주 창의 Window 상태를 Minimized로 설정하십시오. 로드 된 이벤트를 연결합니다. 예 : 'void MainWindow_Loaded (객체 발신자, RoutedEventArgs e) { var w = 새 창(); w.Owner = this; w.Show(); } ' – AndrewS