Хочу избавиться от форм и прочих "прелестей", тянущих программы со старта под 400к.
За основу взял примеры из GDI+, где создаётся окно
begin
wndClass.style := CS_HREDRAW or CS_VREDRAW;
wndClass.lpfnWndProc := @WndProc;
....
описыватся WndProc
function WndProc(Wnd : HWND; message : UINT; wParam : Integer; lParam: Integer) : Integer; stdcall;
var
Handle: HDC;
ps: PAINTSTRUCT;
begin
case message of
WM_PAINT:
...
и в конце программы есть такой цикл:
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
while(GetMessage(msg, 0, 0, 0)) do
begin
TranslateMessage(msg);
DispatchMessage(msg);
end;
end.
Вроде всё понятно.
Но непонятно другое - как сдлеать, чтобы постоянно вызывалась проыедура отрисовки экрана? Т.е. у меня есть процедура, которая рисует. Как мне сделать, чтобы она постоянно вызывалась и нарисованное её отображалось?
Если я вклиниваю вызов отрисовки своих данных в последний приведенный цикл, то оно вроде как рисует... но только этого невидно, до тех пор, пока onpaint не понадобится (например окно чатично перекрыто). Если самому onpaint вызывать - ничего не происходит.
Может кто сталкивался? Просветите. А то для меня это совсем непривычная тропа и требуется стартовый пинок в нужном направлении.
to Shirson
Знаешь, на самом деле в каждой второй ( и даже больше ) конкурсной работе всё что ты перечислил есть =).
Посмотри например мои ( каша, но суть должна быть понятна ), а вообще среднестатистический цикл выглядит так:
while "Флаг октивности проги!" do begin
if PeekMessage(Msg, WinHWND, 0, 0, PM_REMOVE) then //Обработка сообщений
begin
TranslateMessage(gfx.msg);
DispatchMessage(gfx.msg);
end;
if "Если приложение кативно" then begin
MainUpdate();
MainDraw();
FPSUpdate();//считаем фпс
end else Sleep(1);
end;
// Здесь нужно уничтожать свой движок, очищать систему от своих ресурсов и прочее...
end.