program CreateWindowAPI;
{$R 'CreateWindowAPI.res' 'CreateWindowAPI.rc'}
uses
Windows, Messages;
var
AWndClass: WNDCLASS;
AWnd: HWND;
AMsg: TMsg;
bmp: HBITMAP;
dcbmp: HDC;
tagbmp: TBitmap;
function WindowProc(AWnd: HWND; Msg: Integer; wParam: WPARAM; lParam: LPARAM): Longint; stdcall;
var
rct: TRect;
begin
case Msg of
WM_ERASEBKGND: begin
GetClientRect(AWnd, rct);
SetStretchBltMode(wParam, HALFTONE);
StretchBlt(wParam, 0, 0, rct.Right, rct.Bottom, dcbmp, 0, 0, tagbmp.bmWidth, tagbmp.bmHeight, SRCCOPY);
Result:=$ff;
end;
WM_CLOSE: begin
PostQuitMessage(0);
Result:=0;
end;
else Result:=DefWindowProc(AWnd, Msg, wParam, lParam);
end
end;
begin
bmp:=LoadBitmap(HInstance, 'bgimage');
GetObject(bmp, SizeOf(TBitmap), @tagbmp);
dcbmp:=CreateCompatibleDC(0);
SelectObject(dcbmp, bmp);
AWndClass.Style:=CS_HREDRAW or CS_VREDRAW;
AWndClass.lpfnWndProc:=@WindowProc;
AWndClass.cbClsExtra:=0;
AWndClass.cbWndExtra:=0;
AWndClass.hInstance:=HInstance;
AWndClass.hIcon:=LoadIcon(HInstance, 'APPICON');
AWndClass.hCursor:=LoadCursor(0, IDC_ARROW);
AWndClass.hbrBackground:=HBRUSH(COLOR_INFOBK)+1;
AWndClass.lpszMenuName:=nil;
AWndClass.lpszClassName:='TWINAPIFORM';
RegisterClass(AWndClass);
AWnd:=CreateWindowEx(
0,
AWndClass.lpszClassName,
'MyWinAPIForm',
WS_OVERLAPPEDWINDOW or WS_VISIBLE,
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
Integer(CW_USEDEFAULT),
0, 0, HInstance,
nil);
CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', 'Edit1',
WS_CHILD or WS_VISIBLE, 10, 10, 100, 25, AWnd, 0,
HInstance, nil);
CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', 'Edit2',
WS_CHILD or WS_VISIBLE, 10, 40, 100, 25, AWnd, 0,
HInstance, nil);
CreateWindowEx(WS_EX_CLIENTEDGE, 'EDIT', 'Edit3',
WS_CHILD or WS_VISIBLE, 10, 70, 100, 25, AWnd, 0,
HInstance, nil);
while GetMessage(AMsg, 0, 0, 0) do begin
TranslateMessage(AMsg);
DispatchMessage(AMsg);
end;
DestroyWindow(AWnd);
UnregisterClass(AWndClass.lpszClassName, HInstance);
DeleteDC(dcbmp);
DeleteObject(bmp);
end.