【发布时间】:2011-06-13 06:38:29
【问题描述】:
我有一个用 C 语言编写的遗留应用程序,它由一个主窗口和几个从菜单选项打开的 mdi 子窗口组成。为了允许用 C# 编写新的 mdi 子级,我创建了一个 C++ COM 互操作层,该层由 C 代码调用,然后调用 C# 代码。然后,我使用 SetParent API 将 C 主窗口设置为打开的任何 C# 窗口的新父级。这似乎可行 - C# 窗口的行为类似于主窗口的 MDI 子窗口。但是,子窗口不能正确绘制,如果您将其他窗口移到它上面或将其移动到主窗口的边缘,它只会变得更糟 - 它会被其他窗口的一部分绘制或在移动时留下一些自身的碎片.此外,屏幕响应不佳,例如您无法从一个文本框切换到另一个文本框。
请不要质疑我的解决方案的架构(相信我,这是唯一的方法),但如果您曾经遇到过由 SetParent 创建的孩子的此类问题,我很想听听您是否管理修复它。
【问题讨论】:
-
+1 对于措辞清晰的问题。然而,“这是唯一的方法”往往是不正确的。 ;) 欢迎来到 SO
-
公平点!我只是想继续关注这个问题,因为我已经尝试并排除了一些“其他方式”。
标签: c# c winforms com-interop setparent