为什么没有createwindow却可以响应windows的消息呢?

peihexian 2005-12-01 03:50:51
TTEST = class(TObject)
private
FWindowHandle: HWND;
procedure WndProc(var Msg: TMessage);
protected
public
constructor Create;
destructor Destroy; override;
end;

constructor TUSB.Create;
begin
FWindowHandle := AllocateHWnd(WndProc);
USBRegister;
end;

destructor TUSB.Destroy;
begin
DeallocateHWnd(FWindowHandle);
inherited Destroy;
end;

procedure TUSB.WndProc(var Msg: TMessage);
begin
if (Msg.Msg = WM_DEVICECHANGE) then
begin
try
//WMDeviceChange(Msg);
except
Application.HandleException(Self);
end;
end
else
Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
end;

这个东东是从TObject继承下来的,为什么加了个 procedure WndProc(var Msg: TMessage);
就可以接收windows的消息了呢?我的理解好像是要有Window才可以处理消息循环的啊???

偶搞了6年的delphi了,看来是白学了。
...全文
76 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aiirii 2005-12-01
老刘说得对:

function AllocateHWnd(Method: TWndMethod): HWND;
begin
...
Result := CreateWindowEx(WS_EX_TOOLWINDOW, UtilWindowClass.lpszClassName,
'', WS_POPUP {+ 0}, 0, 0, 0, 0, 0, 0, HInstance, nil);
...
end;
  • 打赏
  • 举报
回复
iorizht 2005-12-01
JF啊,怎么回复不了呢?着急。。。
  • 打赏
  • 举报
回复
peihexian 2005-12-01
是滴,就是楼上说滴这样!
  • 打赏
  • 举报
回复
iorizht 2005-12-01
西西,还有这好事..... 多谢多谢!JF。。。
  • 打赏
  • 举报
回复
ly_liuyang 2005-12-01
AllocateHWnd就分配了句柄,当然就能响应消息的
  • 打赏
  • 举报
回复
peihexian 2005-12-01
上火,问题问完了也知道答案了,哪个好心人来接个分吧,我好把帖子结了。

我理解的并没有错误,确实是createwindow了,在classes单元中完成的这个工作。
  • 打赏
  • 举报
回复
peihexian 2005-12-01
不好意思,基类名称忘记改了,不是TTEST,应该是TUSB
  • 打赏
  • 举报
回复
相关推荐
发帖
Windows SDK/API
加入

1169

社区成员

Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
申请成为版主
帖子事件
创建了帖子
2005-12-01 03:50
社区公告
暂无公告