请大家帮忙看看三句话而已(30分)

  • 主题发起人 主题发起人 nj_wangzhen
  • 开始时间 开始时间
N

nj_wangzhen

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tfmain.FormCreate(Sender: TObject);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;
 
没什么好办法,记住就行。这是在MDI的客户区放图象的源码吧。
 
和Applicaiton.onMessage消息一样的!
 
procedure Tfmain.FormCreate(Sender: TObject);
应该是创建 midi主窗口背景的程序
它的主要思样是 替换 tfmain 的 用已写的过程 替换 tfmain 的clientwndproc 方法.
有点像 override 但因为 tform 的clientwndproc 方法不是virture类型的, 所以不能3用
override 重写 clientwndproc 只能用一个比较费劲的方法.
以下是我个人的理解.
begin
FClientInstance := MakeObjectInstance(ClientWndProc); // fclientinstance 得到 tfmain.clientwndproc 这个方法的地址 (也就是得到vmm 表的)
FPrevClientProc := Pointer(GetWindowLong(ClientHandle, GWL_WNDPROC)); //FPrevClientProc 得到 当前你的程序的 ClientHandle 的地址.
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance)); 用你的 ClientHandle 去替换 原来的 clientwndproc 的地址.
end;


 
后退
顶部