c++ 如何将辅助窗口放在主窗口后面?

a14dhokn  于 2023-01-15  发布在  其他
关注(0)|答案(1)|浏览(152)

当我在用Embarcadero C++Builder 10.4编写的项目中添加辅助窗口(TForm)时,遇到了辅助窗口总是在主窗口前面的问题,也就是说,当单击主窗口时,辅助窗口失去焦点,但仍在主窗口的顶部。
我试过修改BorderStyle属性、PopupMode属性,甚至试过在主窗口激活时调用辅助窗口的SendToBack()方法,但没有任何变化。
辅助窗口由NULL所有者创建,并通过其Show()方法显示。
问题很简单:如何使活动窗口(TForm)位于其他窗口(TForm)之上?


(当主要TForm处于活动状态时,主要TForm不应位于次要TForm之后。)

nxowjjhe

nxowjjhe1#

这是预期行为。
如果Application->MainFormOnTaskBar设置为true,则当辅助TForm正在创建其窗口,并且该窗体的FormStylefsNormal,并且该窗体未显示为模态时,则忽略其PopupMode,并将其所有者窗口(用Win32 API术语,而不是VCL术语)设置为Application->MainForm窗口。
当一个窗口被分配了一个所有者窗口时,它永远不能移到它的所有者窗口之后。
要完成您的要求(不切换到MDI设计),您需要让隐藏的TApplication窗口成为您的辅助窗口的所有者,然后您就可以在两个窗口之间自由切换。要实现这一点,您可以:

  • Application->MainFormOnTaskBar设置为false(不建议在Vista+系统上使用,因为它还会禁用许多其他VCL行为,而这些行为是正确的Vista+交互所必需的)
  • 使用TApplication::OnGetMainFormHandle事件提供所需的所有者窗口,在本例中为Application->Handle
  • 让辅助TForm类覆盖虚拟CreateParams()方法并将Params.WndParent设置为Application->Handle

相关问题