{{notification.text}}

MirGames

Прохожий
26.06.07 21:57
0
Заранее извиняюсь. Хочу сделать окно без Caption.
Вот стили окна.
dwExStyle:=ws_Ex_AppWindow;
dwStyle:= WS_OVERLAPPED;
FHandle:= CreateWindowEx(dwExStyle, WND_TITLE, WND_TITLE, dwStyle, x, y, FWidth, FHeight, 0, 0, 0, self);

Я прочитала, что для того, чтобы исчез заголовок, нужно в dwStyle поставить ws_Popupwindow.
Но как только я его туда добавляю - программа перестает запускаться, выдавая Access Violation. В чем я туплю?
#1
mov, просто mov
26.06.07 22:12
0
Цитата
CreateWindowEx(dwExStyle, WND_TITLE, WND_TITLE, dwStyle, x, y, FWidth, FHeight, 0, 0, 0, self);

разве нельзя поставить сей параметр равным '' ?

или те рамка не нужна ?
тода юзай что-то типа WS_BORDER or WS_VISIBLE
Цитата
ws_Popupwindow

Creates a pop-up window with WS_BORDER, WS_POPUP, and WS_SYSMENU styles. The WS_CAPTION and WS_POPUPWINDOW styles must be combined to make the window menu visible.
#2
26.06.07 23:52
0
Mad_Beagle а чё у тебя два титла???
CreateWindowEx(dwExStyle, WND_TITLE-назови лучше WND_Class))), WND_TITLE, dwStyle, x, y, FWidth, FHeight, 0, 0, 0, self);
#3
аксакал
27.06.07 08:55
0
WS_POPUP
WinAPI AV не кидает )
#4
Прохожий
27.06.07 14:12
0
Не получается :-( СТоит мне поставить вместо первого WND_TITLE что бы то ни было другое - опять та же ошибка. Причем она какая то странная - по адресу 00000000

Хотя нет, получилось, это я поправила, но ws_popup все равно не встает.


>WS_POPUP
WinAPI AV не кидает

Хорошо тебе говорить :-) А что это тогда?
Отредактировано: 27.06.07 14:16
#5
mov, просто mov
27.06.07 15:28
0
Mad_Beagle
первый WND_TITLE это класс окна, а AV у тя идёт дальше когда обращаешся к этому окну иль в WndProc

и вапще сырцы в студию )
#6
27.06.07 15:36
0
Mad_Beagle дауж исходники в студию ТЧК)))
и советую тебе если не хочешь выкладывать исходники то просто замени второй WND_Title
Отредактировано: 27.06.07 15:37
#7
27.06.07 16:02
0
Цитата(Mad_Beagle @ 27.06.2007 - 12:12) [snapback]60172[/snapback]

>WS_POPUP
WinAPI AV не кидает

Хорошо тебе говорить :-) А что это тогда?

AV кидает твое приложение, если по адресу 000000 - то значит обращаешься по нулевому адресу.
#8
Прохожий
27.06.07 16:07
0
появилось одно подозрение: стиль popupwindow конфликтует с процедурой ResizeScene:

Код
  OrthoMatrix := TGLMatrixes.Create;
  PerspMatrix := TGLMatrixes.Create;

  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  gluPerspective(30, Width/Height, 1.0, 550.0);
  glTranslatef(0.0,0.0,-1.0);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glViewport(0, 0, Width, Height);
  SaveMatrix(PerspMatrix);


  glMatrixMode(GL_PROJECTION);
  glLoadIdentity;
  glOrtho(0, Width, Height, 0, -1, 1);
  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity;
  glViewport(0, 0, Width, Height);
  SaveMatrix(OrthoMatrix);


с overlappedwindow все работает нормально.
#9
mov, просто mov
27.06.07 16:12
0
Mad_Beagle
при чём тут матрицы и окно? ;)
и меня ничё не конфликтует даже с гл :)
F7 те в помош

Точно AV кидает ? а то вы думаете что Run time error это тока AV и больше ничего :)
Отредактировано: 27.06.07 16:14
#10
Прохожий
27.06.07 16:13
0
Обнаружено методом тыка. Откуда ж я знаю, при чем они здесь? :-)
#11
mov, просто mov
27.06.07 16:27
0
Mad_Beagle
свой же код не наеш

Цитата
TGLMatrixes

твой класс ?
#12
Прохожий
27.06.07 16:31
0
мой

Код
type

TGLMatrix = Array [0..3, 0..3] of GLFloat;

    TGLMatrixes = class
      private
        FModel : TGLMatrix;
        FProj  : TGLMatrix;
        FTex   : TGLMatrix;
      public
        Constructor Create;
        Destructor Destroy; override;
    end;

    PGLMatrixes = ^TGLMatrixes;

    procedure SaveMatrix(PMatrixes : TGLMatrixes);
    procedure LoadMatrix(PMatrixes : TGLMatrixes);

var
  OrthoMatrix : TGLMatrixes;
  PerspMatrix : TGLMatrixes;


implementation

procedure SaveMatrix(PMatrixes : TGLMatrixes);
begin
With PMatrixes do begin
glGetFloatv(GL_PROJECTION_MATRIX, @FProj);
glGetFloatv(GL_MODELVIEW_MATRIX,  @FModel);
glGetFloatv(GL_TEXTURE_MATRIX,    @FTex);
end;//With
end;

procedure LoadMatrix(PMatrixes : TGLMatrixes);
Var MatrixMode : GLInt;
begin
glGetIntegerv (GL_MATRIX_MODE, @MatrixMode);
With PMatrixes do begin
glMatrixMode(GL_PROJECTION);
glLoadMatrixF(@FProj);
glMatrixMode(GL_MODELVIEW);
glLoadMatrixF(@FModel);
glMatrixMode(GL_TEXTURE);
glLoadMatrixF(@FTex);
end;//With
glMatrixMode(MatrixMode);
end;

{ TGLMatrixes }

constructor TGLMatrixes.Create;
begin

end;

destructor TGLMatrixes.Destroy;
begin
  Free;
  inherited;
end;


=======================

но создание матриц проходит нормально. беда начинается со строки glLoadIdentity и дальше.
#13
27.06.07 16:37
0
Mad_Beagle кинь код с созданием окна или выложи его как эти матрицы так тяжко чёто делать
И дело не в матрицах потому что ты не изменяешь там ничего связанного с окном.
#14
mov, просто mov
27.06.07 16:47
0
Mad_Beagle
тут не окно тут матрицы ;)
какой ран тайм еррор ? 216 ?
#15
Прохожий
27.06.07 16:51
0
debugger exception notification
Access violation at adress 00000000. Read of adress 00000000
#16
27.06.07 16:57
0
Mad_Beagle похоже это просто ошибка в матрицах
#17
Прохожий
27.06.07 17:12
0
Я сделала так: вынесла процедуры формирования матриц из модуля создания окна в модуль сохранения матриц, как

procedure FormPersp(Width,Height: integer);
procedure FormOrtho(Width,Height: integer);

Ошибка больше не выпадает. Но при включении все остальных процедур - если стоит стиль popup - ничего не рисуется, черный экран, если overlapped - все рисуется и все работает.
Я не понимаю, что происходит :-(
#18
27.06.07 17:24
0
Сложно сказать без сорцов, что не так. Я изменяю стиль окна при переходе Fullscreen/Windowed так:

Код

  if FFullscreen then
  begin
    SetWindowLong(FHandle, GWL_EXSTYLE, WS_EX_APPWINDOW);
    SetWindowLong(FHandle, GWL_STYLE, Integer(WS_POPUP) or WS_CLIPCHILDREN
      or WS_CLIPSIBLINGS);
  end
  else begin
    SetWindowLong(FHandle, GWL_EXSTYLE, WS_EX_APPWINDOW or WS_EX_WINDOWEDGE);
    SetWindowLong(FHandle, GWL_STYLE, WS_OVERLAPPED or WS_CAPTION or
      WS_CLIPCHILDREN or WS_CLIPSIBLINGS);
    SetWindowPos(FHandle, 0, (Screen.Width-FResX) div 2, (Screen.Height-FResY) div 2, 0, 0,
      SWP_NOSIZE or SWP_NOZORDER or SWP_NOACTIVATE);
  end;
Отредактировано: 27.06.07 17:26
#19
27.06.07 17:26
0
Mad_Beagle значит читаю я сейчас Мёртвые Души Гоголя Н.В.
так ты очень похожа на госпожу коробочка)))
#20
Прохожий
27.06.07 17:34
0
вот это код создания окна:

Код
constructor TCWnd.Create(Width, Height,bits:integer; FullScreenflag:bool);

var
  dwExStyle:cardinal;
  dwStyle:cardinal;
  h_Instance:hinst;
  x,y: integer;
  dmScreenSettings: Devmode;


function WndProc(hwnd, message: DWORD; wParam, lParam: Integer): Integer; stdcall;
begin
  result:=0;
  case message of
    WM_CREATE:
      begin
      Mouse:=TMouse.Create;
      end;
    WM_ACTIVATEAPP:
    begin
      if LOWORD(wParam) = WA_ACTIVE then
      begin
        Engine.Active := true;
        ShowWindow(hwnd, SW_SHOWNORMAL);
        Time_Old:=GetTimer;
      end
      else begin
        Engine.Active := false;
        ShowWindow(hwnd, SW_SHOWMINIMIZED);
      end;
    end;
    WM_SIZE:
      begin
        ResizeGLScene(LOWORD(LPARAM), HIWORD(LPARAM));
        Result := 0;
      end;
    WM_DESTROY :
      begin
        PostQuitMessage(0);
      end
    else
    Result := DefWindowProc(hwnd, message, wParam, lParam);
    end;
end;

begin
FWidth:=Width;
FHeight:=Height;
h_instance:=GetModuleHandle(nil);

  ZeroMemory(@FClass, SizeOf(FClass));
  with FClass do
  begin
    style         := CS_HREDRAW or CS_VREDRAW or CS_OWNDC;
    lpfnWndProc   := @WndProc;
    hCursor       := LoadCursor(0, IDC_ARROW);
    hbrBackground := 0;
    lpszClassName := 'CWindow';
    hInstance     := h_instance;
  end;

  dwExStyle:=ws_Ex_AppWindow;
  dwStyle:=  WS_popupWINDOW or WS_VISIBLE;

  if  RegisterClass(FClass)=0 then
    begin
      MessageBox(0,'Failed To Register The Window Class.','Error',MB_OK or MB_ICONERROR);
      exit;
    end;

  Screen.cx := GetSystemMetrics(SM_CXSCREEN);
  Screen.cy := GetSystemMetrics(SM_CYSCREEN);
  x:= (Screen.cx - FWidth) div 2;
  y:= (Screen.cy - FHeight) div 2;

  FHandle:= CreateWindowEx(dwExStyle, 'CWindow', '', dwStyle, x, y, FWidth, FHeight, 0, 0, 0, self);

  if FHandle=0 then
    begin
      Destroy();
      MessageBox(0,'Window creation error.','Error',MB_OK or MB_ICONEXCLAMATION);
      exit;
    end;

PrepareWindow;
ShowWindow(FHandle,SW_SHOW);
SetForegroundWindow(FHandle);
SetFocus(FHandle);

  if (not InitGl()) then
    begin
      Destroy();
      MessageBox(0,'initialization failed.','Error',MB_OK or MB_ICONEXCLAMATION);
      exit;
    end;


============

Весь проект я не смогу выложить, он все таки большой, но те куски кода, которые скажете - я покажу.

Проблема на данный момент стоит так: при стиле popup при запуске окна рисуется черный экран. после альт-таба - начинают рисоваться элементы в Орто-проекции (кнопки, текст). то, что нарисовано в gluPerspective рисуется черными силуэтами, ни цветов, ни текстур. При всем этом если стоит стиль overlapped - рисуется все и сразу и хорошо.
#{{post.Index}}
{{post.Author.Login}}
{{post.CreatedDate | date:'dd.MM.yy HH:mm'}}
{{post.VotesRating}}
Отредактировано: {{post.UpdatedDate | date:'dd.MM.yy HH:mm'}}