Registriert seit: 6. Jan 2005
Ort: Lübbecke
575 Beiträge
Turbo C++
|
Re: [Non VCL] - Button erscheint nicht...
11. Okt 2005, 15:35
Naja gut ich steh vor dem nächsten Problem mit den Buttons...
Folgendes hab ich bis jetzt:
Code:
program TestProg;
uses
Windows,
Messages;
var
WndMain,
WndAbout: TWndClassEx;
hWndMain: HWND;
//Button Handles
msg: TMSG;
function WndMainProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
var
hBtnAbout,
hBtnExit: DWORD;
begin
case uMsg of
WM_CREATE: begin
hBtnAbout := CreateWindow('BUTTON', 'About',
WS_CHILD or WS_VISIBLE,
220, 235, 70, 24,
hwnd, 0, 0, nil);
hBtnExit := CreateWindow('BUTTON', 'Beenden',
WS_CHILD or WS_VISIBLE,
310, 235, 70, 24,
hwnd, 0, 0, nil);
end;
WM_DESTROY: PostQuitMessage(0);
[color=red] WM_COMMAND: if wParam = BN_CLICKED then
if lParam = hBtnAbout then
begin
CreateWindowEx(0,
'wnd_About', 'About',
WS_DLGFRAME or WS_VISIBLE,
300, 300,
300, 200,
hwnd, 0, 0, nil);
EnableWindow(hwnd, False);
end else if lParam = hBtnExit then
SendMessage(hwnd, WM_DESTROY, 0, 0);
end;
Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
[/color]
function WndAboutProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
var
hBtnOk: DWORD;
begin
case uMsg of
WM_CREATE: begin
hBtnOk := CreateWindow('BUTTON', 'OK',
WS_CHILD or WS_VISIBLE,
210, 260,
70, 24,
hwnd, 0, 0, nil);
end;
end;
Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
function RegisterWindowClasses: Boolean;
begin
WndMain.cbSize := SizeOf(TWndClassEx);
WndMain.style := CS_OWNDC;
WndMain.lpfnWndProc := @WndMainProc;
WndMain.cbClsExtra := 0;
WndMain.cbWndExtra := 0;
WndMain.hInstance := hInstance;
WndMain.hCursor := LoadCursor(0, IDC_ARROW);
WndMain.hbrBackground := COLOR_BTNSHADOW;
WndMain.lpszMenuName := nil;
WndMain.lpszClassName := 'wnd_Root';
RegisterClassEx(WndMain);
WndAbout.cbSize := SizeOf(TWndClassEx);
WndAbout.style := CS_OWNDC;
WndAbout.lpfnWndProc := @WndAboutProc;
WndAbout.cbClsExtra := 0;
WndAbout.cbWndExtra := 0;
WndAbout.hInstance := hInstance;
WndAbout.hCursor := LoadCursor(0, IDC_ARROW);
WndAbout.hbrBackground := COLOR_WINDOW;
WndAbout.lpszMenuName := nil;
WndAbout.lpszClassName := 'wnd_About';
RegisterClassEx(WndAbout);
Result := True;
end;
begin
if not RegisterWindowClasses then
Exit;
hWndMain := CreateWindowEx(WS_EX_APPWINDOW,
'wnd_Root', 'Haupt Fenster',
WS_OVERLAPPED or WS_SYSMENU or WS_MINIMIZEBOX or WS_VISIBLE,
200, 300,
400, 300,
0, 0, hInstance, nil);
while True do
begin
if not GetMessage(msg, 0, 0, 0) then
break;
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.
Das funktioniert nicht.
Wenn ich aber die beiden Buttonvariablen hBtnAbout und hBtnExit als globale Variable deklariere funktioniert es.
Ich habs (wenn die beiden lokal waren) schon mit allem Hi und Lo usw. probiert aber nix klappt...
Woran liegt das
Chuck Norris has counted to infinity ... twice!
|