gpt4 book ai didi

c# - 如何隐藏 Owner 最小化后显示的 Owned 窗口?

转载 作者:可可西里 更新时间:2023-11-01 14:37:01 27 4
gpt4 key购买 nike

我知道 Owned windows 之间的契约(Contract)和他们的所有者,并且当所有者被隐藏时,拥有的窗口也被隐藏。这实际上是我想要的。问题是,如果您在所有者窗口最小化后 显示一个自有窗口,则自有窗口不会隐藏,而是正常显示在屏幕上。在这种情况下,窗口的 WindowState 在启动时被最小化,因此显示的任何拥有的窗口都会显示在屏幕上。

我知道我可以调用ShowOwnedPopups强制操作系统隐藏所有拥有的窗口,但这似乎只在实际显示拥有的窗口后才起作用,因此屏幕上会闪烁。我已经尝试显式隐藏窗口(例如,删除 WS_VISIBLE 位或尝试更改 WM_SHOWCOMMAND 以使其显示为隐藏),但是当所有者恢复时,拥有的窗口不可见。这与 ShowOwnedPopups API 的文档一致,其中唯一可见的窗口是那些被 ShowOwnedPopups 调用隐藏的窗口。

所以我正在寻找某种方法让操作系统以这样一种方式显示窗口,即在所有者恢复之前它不会对最终用户可见 - 或者 - 一种在窗口上设置标志的方法这样操作系统认为它使用 ShowOwnedPopups 隐藏了窗口,然后我将手动隐藏窗口并设置该标志。

请注意,显示拥有的窗口的代码与外壳无关,因此在恢复所有者之前不显示拥有的窗口并不是一件简单的事情。这是一个单独的自定义控件的一部分,在本例中它恰好是一个 WPF 控件,因此该控件甚至可以在 ElementHost 中使用,所以我也不能只监视所属窗口的 WindowState。不过欢迎使用任何 Windows API 解决方案。

最佳答案

作为一个小技巧(我之前在我的一个项目中使用过),我建议在可见区域之外创建窗口,最小化并在最小化时再次将其位置移动到可见区域。检查下面的代码。

private void Window_Loaded(object sender, RoutedEventArgs e)
{
var w = new Window(); // Create window
w.Owner = this; // Set this window as owner
w.WindowStartupLocation = System.Windows.WindowStartupLocation.Manual; // Set startup location as manual
w.Left = -10000; // Set x position to -10000 (or anything which makes it out of bounds)
w.Top = -10000; // Set y position to -10000
w.Show(); // Show window (it will not be shown, not even blink)
w.WindowState = System.Windows.WindowState.Minimized; // Set window as minimized
w.Left = 100; // Set x position to 100 (or whatever you want)
w.Top = 100; // Set y position to 100 (or whatever you want)
}

关于c# - 如何隐藏 Owner 最小化后显示的 Owned 窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9379808/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com