大家帮我看看这段代码,哪儿错了
运行后显示'CreateWindow failed',请帮忙看看原因。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TMyData=record
lpszInfo:PChar;
dwNumber:DWORD;
end;
PMyData=^TMyData;
var
Form1: TForm1;
implementation
{$R *.dfm}
function WindowProc(TheWindow:HWnd;TheMessage,WParam,
LParam:Longint):Longint;stdcall;
var
lpszInfoString:PChar;
dwInfoNumber:DWORD;
begin
case TheMessage of
WM_CREATE:
begin
lpszInfoString:=PMyData(PCreateStruct(LParam).lpCreateParams).lpszInfo;
dwInfoNumber:=PMyData(PCreateStruct(LParam).lpCreateParams).dwNumber;
ShowMessage(Format('String:%s'+Chr(13)+'Number:%d',
[lpszInfoString,dwInfoNumber]));
end;
WM_DESTROY:
begin
PostQuitMessage(0);
Exit;
end;
end;
end;
function RegisterClass:Boolean;
var
WindowClass:TWndClass;
begin
WindowClass.style:=CS_HREDRAW or CS_VREDRAW;
WindowClass.lpfnWndProc:=@WindowProc;
WindowClass.cbClsExtra:=0;
WindowClass.cbWndExtra:=0;
WindowClass.hInstance:=hInstance;
WindowClass.hIcon:=LoadIcon(0,IDI_WINLOGO);
WindowClass.hCursor:=LoadCursor(0,IDC_APPSTARTING);
WindowClass.hbrBackground:=COLOR_WINDOW;
WindowClass.lpszClassName:='TestClass';
Result:=Windows.RegisterClass(WindowClass)<>0;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hWindow:HWND;
ExtraCreationData:TMyData;
begin
if not RegisterClass then
begin
ShowMessage('RegisterClass failed');
Exit;
end;
ExtraCreationData.lpszInfo:='ExtraCreationData information string';
ExtraCreationData.dwNumber:=12345;
hWindow:=CreateWindow('TestClass',
'API Window',
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
CW_USEDEFAULT,
Form1.Handle,
0,
hInstance,
@ExtraCreationData
);
if hWindow<>0 then
begin
ShowWindow(hWindow,SW_SHOWNORMAL);
UpdateWindow(hWindow);
end
else
begin
ShowMessage('CreateWindow failed');
Exit;
end;
end;
end.