В этой теме я постараюсь пролить свет на то, как создаются окна с помощью WinAPI функций!
Главным преимуществом созданием программ на чистом WinAPI, является размер программы, около 15 kb занимает пустая форма на WinAPI.
Начнем с того, что избавимся от стандартной формы:
View->Project Manager->Unit1->Remove->Ctrl+F12->Project1->OK
Перед вами появился такой код:
Code
program Project1;
uses
Forms;
{$R *.res}
begin
Application.Initialize;
Application.Run;
end.
Измените этот год на нижеприведенный:
Code
program Project1;
uses
Windows, Messages;
var
wc : TWndClassEx; // окно
pWnd : HWND;
pMsg : TMsg;
function WindowProc(wnd: HWND; Msg: Integer; wParam: wParam; lParam: lParam): Lresult; stdcall;
begin
Result:=0;
case msg of
WM_CREATE:
begin
end;
WM_DESTROY:
begin
Halt;
end;
WM_PAINT:
begin
end;
else
Result:=DefWindowProc(wnd,msg,wparam,lparam);
end;
end;
begin
wc.cbSize := sizeof(wc);
wc.lpfnWndProc := @WindowProc;
wc.cbClsExtra := 0;
wc.cbWndExtra := 0;
wc.hInstance := HInstance;
wc.hCursor := LoadCursor(0, IDC_ARROW);
wc.hbrBackground:= COLOR_BTNFACE+1;
wc.lpszMenuName := nil;
wc.lpszClassName:= 'Prog';
RegisterClassEx(wc);
pWnd := CreateWindowEx(WS_EX_APPWINDOW, 'Prog', 'Prog',
WS_SYSMENU , getsystemmetrics(0)div 2-90, getsystemmetrics(1)div 2-90, 250, 254, 0, 0,
Hinstance, nil);
ShowWindow(pWnd, SW_SHOW);
while true do
begin
if peekmessage(pmsg,0,0,0,pm_remove)=true then
begin
TranslateMessage(pMsg);
DispatchMessage(pMsg);
end;
end;
end.