码迷,mamicode.com
首页 > 其他好文 > 详细

子类化窗口控件的窗口过程(系统级替换,与直接替换控件的WndProc方法不是一回事)

时间:2015-08-21 18:51:50      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

要说灵活性,自然是比不上Delphi自带的覆盖WndProc,或者替换WndProc方法。

unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Controls,   Forms,   Dialogs,   StdCtrls;  
   
  type  
      TForm1   =   class(TForm)  
          Edit1:   TEdit;  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
          FOldWndProc,   FNewWndProc:   TFarProc;  
          procedure   WindowProc(var   Message:   TMessage);  
      public  
          {   Public   declarations   }  
      end;  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  procedure   TForm1.WindowProc(var   Message:   TMessage);  
  begin  
      Message.Result   :=   CallWindowProc(FOldWndProc,   Edit1.Handle,   Message.Msg,  
            Message.WParam,   Message.LParam);  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      FNewWndProc   :=   MakeObjectInstance(WindowProc);  
      FOldWndProc   :=   Pointer(GetWindowLong(Edit1.Handle,   GWL_WNDPROC));  
      SetWindowLong(Edit1.Handle,   GWL_WNDPROC,   LongInt(FNewWndProc));  
  end;  
   
  end.
 
// 其它消息做默认处理
  Result := DefWindowProc(hWnd, uMsg, wParam, lParam);

参考:http://www.cnblogs.com/key-ok/p/3380556.html

子类化窗口控件的窗口过程(系统级替换,与直接替换控件的WndProc方法不是一回事)

标签:

原文地址:http://www.cnblogs.com/findumars/p/4748599.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!