Ich wäre da mal ganz vorsichtig, wenn du behauptest, dass Assarbad fehlerhafte Tutorials veröffentlicht. Ich habe sein Tutoriasl nicht mehr im Kopf - lang, lang ist's her - aber es läuft wahrscheinlich nicht, weil du es verschlimmbessert hast.
Kuck dir mal im
PSDK oder alternativ in meinen Tutorials an, was im loword vom wParam von WM_COMMAND steht: Die ID des Controlls. Diese hast du beim Erzeugen des Buttons mit 0 angegeben und testest im WM_COMMAND Zweig testaber auf das
Handle vom Button.
Mach mal das: Als Konstante führst du IDOK mit 100 ein.
IDOK = 100;
Dann in WM_CREATE:
Delphi-Quellcode:
function WNDProc(hWnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
var
hButton: Cardinal;
Das Erzeugen vom Button:
Delphi-Quellcode:
hButton := CreateWindow('BUTTON', 'caption of a button',
WS_VISIBLE OR WS_CHILD OR WS_BORDER, 100, 100, 200, 24,
hwnd, IDOK, hInstance, nil);
Und das Abfangen vom Klick auf dem Button:
Delphi-Quellcode:
WM_COMMAND:
if hiword(wparam) = BN_CLICKED then
//########################################################################
if loword(wparam) = IDOK then //HIER HIER HIER
//########################################################################
MessageBox(hwnd, 'button pressed', 'Info', 0);
Dann geht das auch.
Den WM_COMMAND-Zweig würde ich aber anderes schreiben, denn wenn du mehrer Controlls hast wird das mit if recht aufwendig und unübersichtlich:
Delphi-Quellcode:
WM_COMMAND:
begin
if hiword(wparam) = BN_CLICKED then
case loword(wparam) of
IDOK: MessageBox(hwnd, 'button pressed', 'Info', 0);
end;
end;
Jetzt kannst du recht einfach und übersichtlich auf verschiedene Controlls reagieren.