DirectDraw + Api + Fpc. FullScreen

Модератор: Модераторы

DirectDraw + Api + Fpc. FullScreen

Сообщение L12 » 13.08.2007 00:17:41

Не могу заставить прогу работать в полноэкранном режиме! Получается
только максимизированное окно. :( Помогите плз...
Вот код...
Код: Выделить всё
{$MODE OBJFPC}
{$APPTYPE GUI}
program test;

uses Windows,DirectDraw;

var
   Wnd : Hwnd;
   Msg : TMsg;
   Wcs : PWndClassEx;
   FDirectDraw : IDirectDraw7;
   FPrimarySurface : IDirectDrawSurface7;
   SurfaceDesc : TDDSurfaceDesc2;
   hRet : HRESULT;
   DC : HDC;
   bltfx :  TDDBLTFX;

procedure QuitMess;
begin
   FPrimarySurface:= nil;
   FDirectDraw:= nil;
   Halt;
end;

function WindowProc(
                Wndl : HWnd;
                Msgl : Cardinal;
                WParam, LParam: longint): longint; stdcall;

begin
result:=0;
case Msgl of
        WM_DESTROY : PostQuitMessage(0)
        else result:=DefWindowProc(Wndl,Msgl,WParam,LParam)
        end;
if Msgl=WM_KEYDOWN then
begin
if WParam=VK_ESCAPE then
begin
QuitMess;
end;
end;
end;

begin
Wcs:=New(PWndClassEx);
Wcs^.cbSize:=SizeOf(TWndClassEx);
Wcs^.style:=CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
Wcs^.lpfnWndProc:=@WindowProc;
Wcs^.cbClsExtra:=0;
Wcs^.cbWndExtra:=0;
Wcs^.hInstance:=HInstance;
Wcs^.hIcon:=LoadIcon(0,IDI_APPLICATION);
Wcs^.hbrBackground:=COLOR_BTNFACE + 1;
Wcs^.lpszMenuName:=nil;
Wcs^.lpszClassName:='main_window';
Wcs^.hIconSm:=0;
Wcs^.hCursor:=LoadCursor(0,IDC_ARROW);
RegisterClassEx(Wcs^);
dispose(Wcs);

Wnd:=CreateWindowEx(
                0,
                'main_window',
                nil,
                WS_VISIBLE,
                0,0,
                GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),
                0,
                0,
                HInstance,
                nil
                );
UpdateWindow(Wnd);
hRet:=DirectDrawCreateEx(nil,FDirectDraw,IDirectDraw7,nil);
if hRet<>DD_OK then Halt;
FDirectDraw.SetCooperativeLevel(Wnd,DDSCL_FULLSCREEN or DDSCL_EXCLUSIVE);
FDirectDraw.SetDisplayMode(800,600,16,0,0);
FillChar(SurfaceDesc, SizeOf(SurfaceDesc),0);
SurfaceDesc.dwSize:=SizeOf(SurfaceDesc);
SurfaceDesc.dwFlags:=DDSD_CAPS;
SurfaceDesc.ddsCaps.dwCaps:=DDSCAPS_PRIMARYSURFACE;
FDirectDraw.CreateSurface(SurfaceDesc, FPrimarySurface, nil);

while GetMessage(Msg,0,0,0) do
        begin
        TranslateMessage(Msg);
        DispatchMessage(Msg);
        end;
end.
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение SovNarKom » 13.08.2007 02:46:16

Вот тебе совет... разберись сначала со стилями окна... и заставь обычное окно работать на весь экран... а уж потом лезь в DD.

А ещё научись юзать поиск и освой базовый синтаксис С++, так как на нём написано ОЧЕНЬ много примеров.

Вот найден за приблизительно 4 митнуты http://www.l1f.nm.ru/articles/Lesson01.html

А ещё за минуту найден вот такой код

Код: Выделить всё
if(fullscreen)
   {
      WindowExStyle=WS_EX_APPWINDOW;   // Расширенный стиль окна
      WindowStyle=WS_POPUP;      // Стиль окна
   }
   else
   {
      
      WindowExStyle=WS_EX_APPWINDOW | WS_EX_WINDOWEDGE;   // Расширенный стиль окна
      WindowStyle=WS_OVERLAPPEDWINDOW;      // Стиль окна
   };



А ты больше времени потратил на создание темы...
Ну ничего... бывает...

Кстати, а что планируешь написать?
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение L12 » 13.08.2007 11:30:37

Спасиб! Я и правда что то с расширенными стилями напутал :)

А писать - то только пробую... Юзаю DX, FPC и WInApi...
Но есть планы на будущее...
А что?
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение L12 » 13.08.2007 11:50:34

Да вот ещё...
При прописывании в стилях окна при создании окна WS_POPUP вылазит ошибка:

Error: range check error while evaluating constants

В чём проблема?
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение SovNarKom » 13.08.2007 12:31:42

Интересно, потому что начинать с DD на мой взгляд сложнее, чем с OGL... но и вообще, мне интересны все проекты, касающиеся графики.

По поводу ошибки - покажи как прописываешь...
SovNarKom
постоялец
 
Сообщения: 389
Зарегистрирован: 28.05.2005 10:37:39
Откуда: Воронеж [vrn] [36]

Сообщение L12 » 13.08.2007 16:10:12

Вот...

Код: Выделить всё
Wnd:=CreateWindowEx(
                WS_EX_APPWINDOW,
                'main_window',
                nil,
                WS_POPUP,
                0,0,
                GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CYSCREEN),
                0,
                0,
                HInstance,
                nil
                );
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение Юра » 13.08.2007 19:37:18

Попробуй написать longint(WS_POPUP)
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение L12 » 13.08.2007 20:47:26

Юра писал(а):Попробуй написать longint(WS_POPUP)

Не помогло... вылазит тоже самое.
Странно... Может у кого есть исходник (работающий)?
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение L12 » 13.08.2007 21:07:13

Хм... скачал исходник с сайта, где инициализируется OpenGL - тож самое...
Может не компилится из-за того, что у меня установлен Xpize?
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение Юра » 14.08.2007 13:23:29

Вообще-то при стандартных опциях компилятора выдается просто пердупреждение на этот код:
Warning: range check error while evaluating constants.

У тебя скорее всего включена опция -Sew
Т.е. компилятор предупреждения считает ошибками...
Юра
постоялец
 
Сообщения: 163
Зарегистрирован: 25.05.2005 10:20:09
Откуда: Украина, Киев

Сообщение L12 » 14.08.2007 14:36:55

Юра писал(а):У тебя скорее всего включена опция -Sew


Как её отключить?
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.

Сообщение L12 » 14.08.2007 14:46:41

Всё ок! Ссам разобрался!

"Options/Mode/Debug". Поставил "Release" и всё работает отлично!

Всем спасибо за внимание!
L12
новенький
 
Сообщения: 11
Зарегистрирован: 25.06.2007 22:28:25
Откуда: Мозырь, Беларусь.


Вернуться в Графика

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru