如何处理创建的mdi孩子?

Man*_*Paz 0 windows delphi winapi

Thansk!我希望使用WM_MDICREATE消息在clientWndProc中获取mdi子句的句柄

procedure TFrmMain.ClientWndProc(var Message: TMessage);
var
Hwnd : HWND;
procedure Default;
begin
 with Message do
  Result := CallWindowProc(FClientWndProc, ClientHandle, Msg, wParam, lParam);
end;

begin
case Message.Msg of
  WM_MDICREATE:
   begin
    hwnd := Message.LParam; //dont' work
    hwnd := TWMMDICreate(Message).MDICreateStruct^.lparam; //don't work
   Default;
   end;

  end;

  inherited ClientWndProc(Message);
  end;
Run Code Online (Sandbox Code Playgroud)

我想在启动MDICHILD时将下一个程序(ChildProc)绑定到MainForm的ClientWndProc过程中

    function childProc(hwnd: HWND;  msg, wParam,lParam: LongInt): LongInt; stdcall;
    begin
     if msg = WM_SYSCOMMAND then
      begin
       CallWindowProc(p,hwnd,msg,wparam,lparam);
        if WParam = SC_MINIMIZE then
          //do something
       end;

    result := CallWindowProc(p,hwnd,msg,wparam,lparam);

    end;
Run Code Online (Sandbox Code Playgroud)

我需要新的chid形式的句柄,像那样的东西

        P := Pointer(SetWindowLong(ActiveMDIChild.Handle, GWL_WNDPROC, integer(@Child)));
Run Code Online (Sandbox Code Playgroud)

Dav*_*nan 6

根据该文件WM_MDICREATE:

返回值

类型:HWND

如果消息成功,则返回值是新子窗口的句柄.

如果消息失败,则返回值为NULL.

所以,答案是窗口句柄窗口过程返回的值.Message.Result在调用继承的窗口过程后读出它.

如果你想在窗口创建之前使用窗口句柄,那么,你运气不好!