句柄只有在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;

浙公网安备 33010602011771号