目的是:
  在主窗口中如感知子窗口的增减,来实现导航按钮的增减,就象它的WindowMenu一样  有劳各位指点!

解决方案 »

  1.   

    如果调用DLL的子窗口,如何在子窗口的关闭事件中将信息传回主窗口?
      

  2.   

    这个问题有点意思,可以研究一下。我粗略的看了VCL关于TCustomFrom.WindowMenu的代码,发现她是在CreateWnd 过程里面实现的
    .....
        case FormStyle of
          fsMDIForm:
            begin
              with ClientCreateStruct do
              begin
                idFirstChild := $FF00;
                hWindowMenu := 0;
                if FWindowMenu <> nil then hWindowMenu := FWindowMenu.Handle;
              end;
              FClientHandle := Windows.CreateWindowEx(WS_EX_CLIENTEDGE, 'MDICLIENT',
                nil, WS_CHILD or WS_VISIBLE or WS_GROUP or WS_TABSTOP or
                WS_CLIPCHILDREN or WS_HSCROLL or WS_VSCROLL or WS_CLIPSIBLINGS or
                MDIS_ALLCHILDSTYLES, 0, 0, ClientWidth, ClientHeight, Handle, 0,
                HInstance, @ClientCreateStruct);
    .......
    非常幸运,这个过程是虚方法,
    所以我们的一个办法可以自己重新继承一个TForm,比如叫做 TMyForm,
    在里面override 这个CreateWnd,在里面不难写代码判断。
    由此衍生出更简单的方法,就是在每个Form的OnCreate和OnDestory里面写代码,通知MDI窗口的建立和销毁。
    类似的居于这个思想的方法应该很多。第二类方法:
    利用ActionList的思想,建立一个TAction,在他的OnUpdate事件里面检查是否有MDI窗口的建立或者销毁,大部分的TAction都是这样在系统空闲的时候不停检查的,非常方便。
    所以我觉得这个可能更适合些。其他的方法我目前没想到,我想一定还有不知道的更好方法。
      

  3.   

    子窗口postmessage回来不就完事了