幻谛

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

句柄只有在TWinControl类才被定义。消息基类是从TComponent类继承的,不存在句柄。Delphi语言提供了AllocateHWnd方法,此方法通过TWndMethod类型方法回一个与其对应的句柄,然后向这个新句柄发送消息即可实现没有句柄的消息传递。

AllocateHWnd方法的实现代码如下:

function AllocateHWnd(Method:TWndMethod):HWND;
var
  TempClass : TWndClass;
  ClassRegistered : Boolean;
begin
  UtilWindowClass.hInstance := HInstance;
{$IFDEF PIC}
  UtilWindowClass.lpfnWndProc := @DefWindowProc;
{$ENDIF}
  ClassRegistered := GetClassInfo(HInstance,UtilWindowClass.lpszClassName,TempClass);
  if not ClassRegistered or (TempClass.lpfnWndProc <> @DefWindowProc) then
  begin
    if ClassRegistered then
      Windows.UnregisterClass(UtilWindowClass.lpszClassName,Hinstance);
    Windows.RegisterClass(UtilWindowClass);
  end;
  Result := CreateWindowEx(WS_EX_TOOLWINDOW,UtilWindowClass.lpszClassName,'',WS_POPUP{!0},0,0,0,0,0,0,HInstance,nil);
  if Assigned(Method) then
    SetWindowLong(Result,GWL_WNDPROC,Longint(MakeObjectInstance(Method)));
end;
posted on 2010-05-30 00:06  幻谛  阅读(483)  评论(0)    收藏  举报