为什么没有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了,看来是白学了。
...全文
105 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
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

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧