MDI程序有若干子窗口,主窗口要在任意子窗口创建成功后显示子窗口Caption和窗口句柄,
不可以通过子窗口创建后回写主窗口或着发自定义消息给主窗口。

解决方案 »

  1.   


     通過 RegeisterWindowMessage  來處也可翠  SendMessage(Application.MainForm.hanle .....   消息來處理也可翠
      

  2.   

    RegeisterWindowMessage 还是要子窗口来发消息给主窗口吧,
    有没有不需要子窗口额外参与的实现方案,由主窗口独立实现。
      

  3.   

    那就在子窗体引用主窗体,创建完后,给主窗体的caption赋值
      

  4.   

    FClientInstance : TFarProc;
    FPrevClientProc : TFarProc;
        
    constructor TForm.Create(AOwner: TComponent);
    begin
      FPrevClientProc := Pointer(GetWindowLong(TForm(FOwner).ClientHandle, GWL_WNDPROC));
      FClientInstance := MakeObjectInstance(ClientWndProc);
      SetWindowLong(TForm(FOwner).ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
    end;procedure TForm.ClientWndProc(var aMessage: TMessage);
    begin
        case aMessage.Msg of
          WM_MDICREATE :
            begin
              aMessage.Result := CallWindowProc(FPrevClientProc, ClientHandle, aMessage.Msg, aMessage.wParam, aMessage.lParam);
              ShowMessage('Create');
            end;
          WM_MDIACTIVATE:
            begin
              ;//这个消息好像没捕获到,可能不是这样用的
            end;
          WM_MDIDESTROY:
            begin
              aMessage.Result := CallWindowProc(FPrevClientProc, ClientHandle, aMessage.Msg, aMessage.wParam, aMessage.lParam);
              ShowMessage('Destory');
            end;
          else
            aMessage.Result := CallWindowProc(FPrevClientProc, ClientHandle, aMessage.Msg, aMessage.wParam, aMessage.lParam);
        end;
    end;基本实现了,当时我想监测子窗口激活的话该如何实现,通过WM_MDIACTIVATE没实现,可能不是这样用的。
    请教高人
      

  5.   

    处理WM_MDIGETACTIVE消息,这个消息里会有子窗体句柄。
    查下MSDNMDI多文档结构客户区消息