使用鼠标移动(拖动)HwndHost

时间:2015-01-12 10:27:26

标签: wpf winapi mdi hwndhost

以下是我要完成的工作 - 在WPF中创建可以托管子Web应用程序的MDI应用程序。我正在使用WPF webbrowser控件来呈现Web应用程序。 WPF本身似乎不支持MDI应用程序,因此经过一些搜索后,我找到了this项目,它使用UI控件来模拟窗口并在WPF画布中管理它们。在我开始将webbrowser控件对象添加为MDI子项之前,这种方法似乎运行得相当好。

当我将webbrowser控件添加为MDI子元素时,它总是出现在其他WPF元素之上,包括其他MDI子控件(如下所示)。根据我的理解,webbrowser控件总是出现在除窗口(和弹出窗口)之外的任何其他WPF对象之上。假设这是真的,我想我需要使用实际的WPF窗口来避免重叠问题。

enter image description here

我现在能想到的唯一解决方案是将WPF窗口包装在HwndHost对象中,然后将其添加为MDI子对象。但是看起来子窗口不能有标题栏。这意味着我需要一个具有虚拟标题栏区域(就像实际窗口标题栏)和实际内容区域(将显示webbrowser控件)的窗口,如下所示(红色边框是HwndHost对象)。

enter image description here

这种方法似乎解决了重叠的问题。 我需要尝试的下一件事是让用户点击虚拟标题栏并在画布元素中拖动MDI窗口。

问题 -

  1. 我对WPF webbrowser的理解是否控制重叠行为?如果没有,我缺少什么?
  2. 第二种方法是否朝着正确的方向迈出了一步,以实现我想要的目标?如果是,我如何实现HwndHost的拖动行为?
  3. 我可以尝试其他替代解决方案吗?
  4. 注意:

    1. 虽然很多人认为MDI不是一个优雅的解决方案,但我没有选择。 (我们尝试了标签式窗口/可停靠等备用解决方案 窗户,但没有得到好评)

    2. 我是互操作编程的新手,并不了解 概念很好。如果我误解了事情,请纠正我。

    3. 谢谢!

0 个答案:

没有答案