Delphi使用普通類對象建立接受window訊息(使用Classes.AllocateHWnd為對象建立一個尺寸為0的視窗,從而有了Handle)good

來源:互聯網
上載者:User

標籤:建立   handle   any   處理   else   sha   proc   oca   核心   

在delphi中,有時候我們希望對象可以接收windows訊息,怎麼辦呢?因為要接收windows訊息起碼要有windows Handle,難道要建立的一個可見視窗?那樣似乎太差強人意了。delphi提供了一個函數Classes.AllocateHWnd。分析AllocateHWND發現delphi CreateWindowEx一個尺寸為0的視窗,視窗是產生了,Handle也有了,但視窗的訊息要處理吧,否則怎麼說讓對象接收Windows訊息呢,但我們都知道類函數和Windows訊息處理函數是不一樣的,類函數的地址應該是Self+函數的位移。這個delphi也幫我們處理好了,在AllocateHWnd內部將我們傳入的對象函數通過MakeObjectInstance轉換為普通函數,然後我們就可以在對象內部處理Windows訊息了。

 

簡寫代碼如下:

TMyHandleWinMessage = class

private

    FWinHandle: HWND;

    procedure WndProc(var Msg: TMessage);

public

    constructor Create;

    destructor Destroy; override;

end;

 

Create 實現:

   FWinHandle = Classes.AllocateHWnd(WndProc);

 

Destroy實現:

  if FWinHandle <> 0 then  Classes.DeallocateHWnd(FWinHandle);  // 必須釋放系統核心對象

 

WndProc實現:

在這裡處理你感興趣的訊息,否則交給Windows處理。

With Msg do

  if Msg = XXX then  // 你打算處理的訊息

  begin

      //

  end

  else

     Result := DefWindowProc(FWinHandle, Msg, wParam, lParam);

 

http://blog.csdn.net/shandiantianying/article/details/9786425

Delphi使用普通類對象建立接受window訊息(使用Classes.AllocateHWnd為對象建立一個尺寸為0的視窗,從而有了Handle)good

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.