MDI主窗口自动获知子窗口创建成功并显示信息 MDI程序有若干子窗口,主窗口要在任意子窗口创建成功后显示子窗口Caption和窗口句柄,不可以通过子窗口创建后回写主窗口或着发自定义消息给主窗口。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 通過 RegeisterWindowMessage 來處也可翠 SendMessage(Application.MainForm.hanle ..... 消息來處理也可翠 RegeisterWindowMessage 还是要子窗口来发消息给主窗口吧,有没有不需要子窗口额外参与的实现方案,由主窗口独立实现。 那就在子窗体引用主窗体,创建完后,给主窗体的caption赋值 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没实现,可能不是这样用的。请教高人 处理WM_MDIGETACTIVE消息,这个消息里会有子窗体句柄。查下MSDNMDI多文档结构客户区消息 SOCKET编程,高手请进 动态窗体的问题 如何用语句启动一下windows应用程序啊 drawgrid 刷新的问题 请教:如何让Tedit组件中的文字居中? SPComm串口通信问题 请教一个棘手的问题?up有分 有什么简单的办法把字符串分离出来 Scoket问题 请教!? 猜字游戏,谁能告诉转换方法?! delphi 2007里怎么建ActiveX Control???
通過 RegeisterWindowMessage 來處也可翠 SendMessage(Application.MainForm.hanle ..... 消息來處理也可翠
有没有不需要子窗口额外参与的实现方案,由主窗口独立实现。
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没实现,可能不是这样用的。
请教高人
查下MSDNMDI多文档结构客户区消息