Direct Draw по русски
Создание класса приложения
Здесь мы опишем класс окна и запустим его...
begin
instance :=GetModuleHandle(nil);
with WindowClass do
begin
style:=CS_HRedraw or CS_VRedraw;
Lpfnwndproc:=@windowproc;
Hinstance:=Instance;
HbrBackground:= color_btnface;
LpszClassName:='DXF';
Hcursor:=LoadCursor(0,IDC_ARROW);
end;
RegisterClass (WindowClass);
Handle:=CreateWindowEx (0,'DXF',,WS_POPUP, 5,5, GetSystemMetrics (SM_CXSCREEN), GetSystemMetrics (SM_CYSCREEN),0,0,instance, nil);
UpdateWindow (Handle);
end.
Запустив эту программку Вы визуально ничего не увидите, однако проверить то, что она вообще существует можно посмотрев задачи, выполняемые Windows. Самый простой способ Alt+Ctrl+Del. Кроме того мы так и не позаботились о том, чтобы удалить из памяти созданное окно. Для того, чтобы наша программка так скоропостижно не закончилась, необходимо её зациклить, т.е. написать такой код, успешный (!!!) выход из которого может осуществить любой (!!!) пользователь. Для этого будем вызывать функцию WindowProc в которой отфильтруем только нужные нам сообщения системы.
function windowproc (Hwn,msg,wpr,lpr: longint): longint; stdcall;
begin
result:=defwindowproc(hwn,msg,wpr,lpr);
if msg=wm_destroy then
begin
FreeAll ;
Halt;
end;
if msg=wm_KeyDown then
begin
if wpr=VK_ESCAPE then begin
FreeAll ;
Halt;
end;
end;
end;
Теперь по быстрому состряпаем зацикливание и все будет готово для дальнейших действий!
Перед магическим словом end. Запишем следующее:
begin
while true do
begin
translatemessage(msg);
dispatchmessage (msg);
application.processmessages;
end;
end.
Вот и все (почти что). Далее мы переходим к самому интересному. Как создавать и использовать поверхности для вывода графики. |