Ich hab folgendes Testprogramm, aber bekomme keine Messages:
Delphi-Quellcode:
program WinMsg;
uses
Forms, Classes, Messages, SysUtils, Windows;
{$R *.res}
type
TWndProcClass = class
protected
procedure WndProc(var msg: TMessage);
public
WinHandle: HWND;
end;
procedure TWndProcClass.WndProc(var msg: TMessage);
begin
MessageBox(0, pansichar(inttostr(msg.Msg)), 'msg', 0);
end;
var
WndProcClass: TWndProcClass;
begin
WndProcClass := TWndProcClass.Create;
WndProcClass.WinHandle := AllocateHWnd(WndProcClass.WndProc);
while True do begin
Sleep(10);
end;
DeallocateHWnd(WndProcClass.WinHandle);
WndProcClass.Free;
end.
Was mach ich falsch?
Edit:
Und zusätzlich die MessageLoop nicht vergessen, denn ohne einen Code, welche die MessageQueue verarbeitet, bekommt das Fenster zwar die Message, aber keiner verarbeitet sie und sie leibt in der Queue stecken.
Ich hab jetzt versucht eine MessageLoop zu improvisieren (hab sowas noch nie gemacht) und ich bekomme jetzt Messages. Aber wozu brauche ich denn jetzt das AllocateHWnd?
Edit2:
Ok, ich habs jetzt glaub ich so weit verstanden: Es gibt Messages für den Thread und andere für ein Window. Wenn ich also nur eine MessageLoop habe bekomme ich "Thread-Messages" aber keine "Window-Messages". Und scheinbar ist WM_QUERYENDSESSION eine solche "Window-Message".
Aber woher weiß ich denn welche Messages der Thread und welche nur ein Window bekommt? Gibt es da vielleicht eine Übersicht oder kennt jemand ein kleines Tutorial?