ich probiere gerade eine Grafikbibliothek aus und steh auf dem sprichwörtlichen Schlauch. Ich poste das Problem dennoch hier, nicht in API & Plattformspezifisches. Weil es wahrscheinlich mit der Bibliothek zusammenhängt. Die stellt kein standardmäßiges API für Freepascal dar.
Hier erst mal der Code des Projektes:
Code: Alles auswählen
 
program GFXWinTest;
 
{$mode delphi}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, Sysutils, windows, 
 
  mygfxlib //Meine Grafikbibliothek, die ich testen will
 
  { you can add units after this };
 
var mywnd: HWND;
 
function MyWindowProc(wnd: HWND; msg: UINT; w: WPARAM; l: LPARAM): LRESULT; stdcall;
var
  dc: HDC;
  ps: TPaintStruct;
  rr: TRect;
begin
 
  case msg of
    WM_PAINT:
      begin
        dc := BeginPaint(wnd, ps);
 
        GetClientRect(wnd,rr);              //Clientbereich des Fensters ermitteln
 
        Ellipse(dc,100,100,200,200);     //Test, ob Ellipse gezeichnet wird
 
        rr.Left:=4; rr.top := 300;
 
        rr.right := 200; rr.Bottom:=318;
 
        DrawText(dc,PChar('Irgendein Text'),32,rr,DT_LEFT);     //Test, ob der Text erscheint
 
        DrawFocusRect(dc,rr);       //Test, ob das Rechteck gezeichnet wird
 
        EndPaint(wnd,ps);
 
      end;
    WM_QUIT: PostQuitMessage(0);
  end;
  Result := DefWindowProc(wnd,msg,w,l);
end;
 
procedure WinGFXActionProc;
var msg: TMsg;
begin
  //ShowWindow(mywnd, SW_SHOWNORMAL);
 
  if GetMessage(msg,0,0,0) then
  begin
    TranslateMessage(msg);
    DispatchMessage(msg);  //hier External SIGSEGV, wenn ich testhalber für diese 3 Funktionen eigene Versionen schreibe.
        //Im jetzigen Beispiel verwende ich aber die Originale dieser Funktionen, 
        //da kommt keine Exception, aber mein Fenster wird nicht angezeigt. Warum ist das so?
  end;
end;
 
procedure WinGFXInitProc;
var
  wc: TWndClassEx; wnd: HWND;
begin
  wc.cbSize          := SizeOf(TWndClassEx);
  wc.Style           := CS_HREDRAW or CS_VREDRAW;
  wc.lpfnWndProc     := @MyWindowProc;
  wc.cbClsExtra      := 0;
  wc.cbWndExtra      := 0;
  wc.lpszMenuName    := nil;
  wc.lpszClassName   := 'Hauptfenster';
  wc.hIconSm         := 0;
 
  RegisterClassEx(wc);
 
  wnd := CreateWindowEx(0,'Hauptfenster','Testanwendung', WS_CAPTION,100,50,800,600,0,0,0,nil);
 
  ShowWindow(wnd{HWND(WindowPtr)}, SW_SHOWNORMAL);
end;
 
begin
  gfxActionProc := @WinGFXActionProc;
  gfxSetupAfterInitProc := @WinGFXInitProc;
  InitGFXSystem(1024,768);
end.
 Hier noch die Prozedur InitGFXSystem():
Code: Alles auswählen
 
procedure InitGFXSystem(XResolution, YResolution: dword);
begin
 
   //.... einleitender Code, der aber mit meinem Problem wohl nichts zu tun hat
 
  gfxIsInGraphMode:=true;
 
    gfxSetupAfterInitProc;  //Hier registiere ich meine Fensterklasse und will das Fenster letzlich anzeigen
 
  StartFPScounter;
  inc(gfxFrames);
 
  while not gfxDone do begin
 
    if not gfxIsInGraphMode then gfxDone:=true;
 
   if PeekMessage(@gfxAMessage, 0 , 0, 0, PM_REMOVE) then begin  //Wenn Message anliegt, diese Verarbeitung 
 
    TranslateMessage(gfxAMessage);
    DispatchMessage(gfxAMessage);
 
   end else begin                                                                            //sonst meine eigene
 
    if gfxUseOpenGL then begin
 
 
      gfxActionProc;   //Hier ist meine eigene Message-Queue-Abfrage drin
 
      if gfxUseMouse then if gfxUseCustomMousePointer then 
 
     //.... weiterer Code
 Dir Prozedur InitGFXSystem() legt die Grafikauflösung fest und startet nach den nötigen Initialisierungen des Grafiksystems die gfxSetupAfterInitProc, das ist ein Prozedurzeiger, dem ich meine WinGFXInitProc zugewisen habe, damit mein Code aufgerufen wird.
Es gibt noch eine gfxActionProc, einen Procedurzeiger, dem ich meine WinGFXActionProc zugewisen habe.
Erreichen will ich die Anzeige meines Fensters in meinem GFX Grafikfenster. Danach soll meine eigene Messageverarbeitung aus WinGFXAcionProc resp. gfxActionProc verwendet werden.
Ich erhalte aber nur das Grafikfenster mit schwarzem Hintergrund. Aber mein Fenster erscheint nicht.
.
 Verein
Verein 
 Links
Links Suche
Suche