代码之家  ›  专栏  ›  技术社区  ›  kpollock

有新的希望吗?将窗口设置为MDI子窗口

  •  1
  • kpollock  · 技术社区  · 16 年前

    我一直在使用WinAPI调用SetParent将表单附加到MDI。

    1. 它在这两种环境中都有效(或似乎有效)。
    2. 它让子窗口拥有自己的窗口状态(正常、最大化),而不是接管已经打开的子窗口的窗口状态,这真的很痛苦。



    对于PX来说,一切都很好。
    相同 SetParent实际上是同一行代码。

    进一步的研究表明,SetParent没有 真的

    Form form = new MyForm();
    WindowsMessageHelper.SetParent(form.Handle, MDIParentHandle); //passed down 
    int parentHandle = WindowsMessageHelper.GetParent(form.Handle);
    

    parentHandle将始终为0。。。。

    我可以强调一下,里面没有问题。Net,问题只出现在PowerBuilder应用程序中

    3 回复  |  直到 16 年前
        1
  •  1
  •   kpollock    16 年前

    最后,我们发现不同之处在于PB的作用相当于设置。MDIParent用于控制PX(调用表单D的地方),但不用于PY。

        2
  •  0
  •   Richard    16 年前
        3
  •  0
  •   Joshua    16 年前

    如果你还没有解决的唯一问题是GetParent不起作用,你也许可以接受它。

    编辑:但是asker有更多的问题。

    有许多API poke必须依次完成才能使其工作。当通过COM接口或在上使用它时,您将更容易地将其作为用户控件并将其放置在本机MDI父控件上。NET MDI子项放入。NET MDI父级。

    这里必须使用不同的基本窗口过程(DefWindowProc与DefMdiChildProc),为了完成这项工作,您最终需要实现DefMdiCildProc。

    如果你使用。NET反射器,您可能能够找到一种方法来引起系统。窗户。形式。表格为您致电DefMdiChildProc。