Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизКак создать окно для DirectDraw посредством WinAPI Найти похожие ветки
← →
Zeqfreed (2003-10-09 16:59) [0]Помогите! Скажите как создать окно в API для использования его в DirectDraw. С теми, которые я делал DD выдаёт ошибку(не помню какую)!?
← →
cyborg © (2003-10-09 17:04) [1]С какими теми ты делал?
Какую ошибку и где?
Криво инициализируется директдрау.
← →
Mystic © (2003-10-09 17:16) [2]Приведи фрашмент своего исходника...
← →
Zeqfreed (2003-10-09 17:55) [3]...function WindowProc (Window : HWnd; Message, WParam : Word;
LParam : LongInt) : LongInt; stdcall;
begin
WindowProc := 0;
case Message of
wm_create : DDInit(Window,1024,768,32); //запуск DD
wm_Destroy : begin
PostQuitMessage (0);
Exit;
end;
end; // case
WindowProc := DefWindowProc (Window, Message, WParam, LParam);
end;
begin
with WindowClass do begin
Style := cs_HRedraw or cs_VRedraw;
lpfnWndProc := @WindowProc;
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := 0;
hIcon := LoadIcon (0, idi_Application);
hCursor := LoadCursor (0, idc_Arrow);
hbrBackground := GetStockObject (White_Brush);
lpszMenuName := "";
lpszClassName := AppName;
end;
If RegisterClass (WindowClass) = 0 then
Halt (255);
Window := CreateWindow
(AppName,
"Win_Min",
ws_OverlappedWindow,
cw_UseDefault,
cw_UseDefault,
cw_UseDefault,
cw_UseDefault,
0,
0,
HInstance,
nil);
ShowWindow (Window, CmdShow);
UpdateWindow (Window);
while GetMessage (Message, 0, 0, 0) do
begin
TranslateMessage (Message);
DispatchMessage (Message);
Halt (Message.wParam);
end;
end.
P.S. Это не то самое приложение(то я потерял), но что-то похожее
Runtime Error 103 at 00403E28
← →
Mystic © (2003-10-09 18:08) [4]1) Не слишком ли рано Halt?
2) Делал ли Search -> FindError по адресу 00403E28 ?
3) код DDInit?
4) Без строки DDInit(Window,1024,768,32); окно создается нормально?
← →
Zeqfreed (2003-10-09 18:19) [5]Да без DDInit окно создаётся Вот код:
procedure DDInit(DDWindow : HWND;ScreenWidth,ScreenHeight,ScreenBitDepth : Integer);
var
HRes : HRESULT;
ddsd : TDDSurfaceDesc2;
ddscaps : TDDSCaps2;
begin
DDImageSurf := nil;
DDBackSurf := nil;
DDPrimarySurf := nil;
DDMain := nil;
DirectDrawCreateEx (nil, DDMain, IDirectDraw7, nil);
DDMain.SetCooperativeLevel(DDWindow, DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);
DDMain.SetDisplayMode (ScreenWidth, ScreenHeight, ScreenBitDepth, 0, 0);
ZeroMemory (@ddsd, SizeOf(ddsd));
with ddsd do begin
dwSize := SizeOf(ddsd);
dwFlags := DDSD_CAPS or DDSD_BACKBUFFERCOUNT;
ddsCaps.dwCaps := DDSCAPS_PRIMARYSURFACE or DDSCAPS_FLIP or DDSCAPS_COMPLEX;
dwBackBufferCount := 1;
end;
DDMain.CreateSurface(ddsd, DDPrimarySurf, nil);
ZeroMemory (@ddscaps, SizeOf(ddscaps));
ddscaps.dwCaps := DDSCAPS_BACKBUFFER;
DDPrimarySurf.GetAttachedSurface(ddscaps, DDBackSurf);
{DDImageSurf := DDLoadBitmap(FDD, imageBmp, 0, 0);
{DDSetColorKey (DDImageSurf, RGB(0, 0, 0));
end;
← →
Zeqfreed (2003-10-09 18:21) [6]{DDImageSurf := DDLoadBitmap(FDD, imageBmp, 0, 0);
{DDSetColorKey (DDImageSurf, RGB(0, 0, 0));
Эти строки заккоментированы
← →
Zeqfreed (2003-10-09 18:37) [7]И ещё, когда вызываю DDInit с идентификатором стандартной формы Delphi в качестве 1-ого аргумента, всё работает хорошо!
← →
Zeqfreed (2003-10-09 18:45) [8]Всем огромное спасибо, всй разрешилось! Просто я немного ступил:
Процедуру DDInit я здесь не полностью написал. У меня там ещё есть проверки успешности действий и запись результатов в файл. Так вот я, забыл перед тем как записывать результы в файл, вызвать процедуру BeginDebugFile(Описана мною в др. модуле) предназначенную для открытия файла.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.042 c