zoukankan      html  css  js  c++  java
  • Receive Windows Messages In NonWindowed Control

    View Code
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
    
      TMsgReceiver = class(TObject)
      private
        fMsgHandlerHWND : HWND;
    
        WM_MY_UNIQUE_MESSAGE : Cardinal;
    
        procedure WndMethod(var Msg: TMessage);
      public
        Point : TPoint;
    
        constructor Create;
        destructor Destroy; override;
      end;
    
      TClickSendForm = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
        procedure FormDestroy(Sender: TObject);
      private
        WM_MY_UNIQUE_MESSAGE : Cardinal;
        fMsgReceiver: TMsgReceiver;
        function GetMsgReceiver: TMsgReceiver;
        property MsgReceiver : TMsgReceiver read GetMsgReceiver;
      public
        { Public declarations }
      end;
    
    var
      ClickSendForm: TClickSendForm;
    
    implementation
    
    {$R *.dfm}
    
    procedure TClickSendForm.FormCreate(Sender: TObject);
    begin
    
      //instantiate MsgReceiver
      MsgReceiver;
    
      WM_MY_UNIQUE_MESSAGE := RegisterWindowMessage('MSG_MY_UNIQUE_MESSAGE');
    end;
    
    { TMsgReceiver }
    
    constructor TMsgReceiver.Create;
    begin
      inherited Create;
    
      fMsgHandlerHWND := AllocateHWnd(WndMethod);
    
      WM_MY_UNIQUE_MESSAGE := RegisterWindowMessage('MSG_MY_UNIQUE_MESSAGE');
    
    end;
    
    destructor TMsgReceiver.Destroy;
    begin
      DeallocateHWnd(fMsgHandlerHWND);
      inherited;
    end;
    
    procedure TMsgReceiver.WndMethod(var Msg: TMessage);
    begin
      if Msg.Msg = WM_MY_UNIQUE_MESSAGE then
      begin
        Point.X := Msg.LParam;
        Point.Y := Msg.WParam;
    
        //just to receive some "output"
        Windows.Beep(Point.X, Point.Y);
      end
      else
        Msg.Result := DefWindowProc(fMsgHandlerHWND, Msg.Msg, Msg.wParam, Msg.lParam);
    end;
    
    procedure TClickSendForm.FormDestroy(Sender: TObject);
    begin
      FreeAndNil(fMsgReceiver);
    end;
    
    procedure TClickSendForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      PostMessage(HWND_BROADCAST, WM_MY_UNIQUE_MESSAGE, x, y);
    end;
    
    function TClickSendForm.GetMsgReceiver: TMsgReceiver;
    begin
      if fMsgReceiver = nil then fMsgReceiver := TMsgReceiver.Create;
      result := fMsgReceiver;
    end;
    
    end.
  • 相关阅读:
    Poj 3177 Redundant Paths (双连通分支+节点统计)
    Uva 796 Critical Links (割边+排序)
    Lightoj 1020
    Flip Game---poj1753(状压+bfs)
    Best Cow Line---poj3617(贪心)
    滑雪---poj1088(动态规划+记忆化搜索)
    King's Quest---poj1904(连通图缩点)
    Steady Cow Assignment---poj3189(多重匹配+二分)
    B. Berland National Library---cf567B(set|模拟)
    HDU Today---hdu2112(最短路-_-坑在是无向图)
  • 原文地址:https://www.cnblogs.com/Jekhn/p/2461508.html
Copyright © 2011-2022 走看看