如何使用 win32 api 在 C 中隐藏 mdi child windows?
How to hide mdi child windows in C using win32 api?
我正在用 C 更新一个用 win32 编写的旧应用程序,要求是根据一些标志隐藏 mdi 子 windows。试了好几种方法都没用。
我试过 ShowWindow
和 SW_HIDE
但这不起作用。 window 只是留在那里空白(并且不生成绘制消息)。 SetWindowPos
和 SWP_HIDEWINDOW
作为标志之一也会发生同样的情况。 SetWindowLong
和 ~WS_VISIBLE
是最糟糕的。它既不会清空客户区也不会生成绘画消息,因此当其他 windows 移动到它上面时会弄脏它。
甚至可以做到吗?如果是,怎么做?
PS:我确实在这里看到一个 Delphi 问题,要求相同,但我不知道 Delphi 并且无法弄清楚任何东西。
正如在之前的讨论中所解释的,例如这个:
How to hide a MDI Child form in Delphi
MDI 的设计根本不允许子 windows 被隐藏,并且 Delphi 的 VCL 有内部逻辑来防止用户代码试图犯那个错误。由于 MDI 的限制,试图规避该逻辑会导致不必要的副作用。
简而言之,要"hide"一个MDI子window,你必须销毁它,然后重新创建 当你想再次 "show" 时。这是 MDI 支持的唯一可靠选项。
我正在用 C 更新一个用 win32 编写的旧应用程序,要求是根据一些标志隐藏 mdi 子 windows。试了好几种方法都没用。
我试过 ShowWindow
和 SW_HIDE
但这不起作用。 window 只是留在那里空白(并且不生成绘制消息)。 SetWindowPos
和 SWP_HIDEWINDOW
作为标志之一也会发生同样的情况。 SetWindowLong
和 ~WS_VISIBLE
是最糟糕的。它既不会清空客户区也不会生成绘画消息,因此当其他 windows 移动到它上面时会弄脏它。
甚至可以做到吗?如果是,怎么做?
PS:我确实在这里看到一个 Delphi 问题,要求相同,但我不知道 Delphi 并且无法弄清楚任何东西。
正如在之前的讨论中所解释的,例如这个:
How to hide a MDI Child form in Delphi
MDI 的设计根本不允许子 windows 被隐藏,并且 Delphi 的 VCL 有内部逻辑来防止用户代码试图犯那个错误。由于 MDI 的限制,试图规避该逻辑会导致不必要的副作用。
简而言之,要"hide"一个MDI子window,你必须销毁它,然后重新创建 当你想再次 "show" 时。这是 MDI 支持的唯一可靠选项。