Rahmen von BMax-Fenstern entfernen

Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Neue Antwort erstellen

Lord Stweccys

Betreff: Rahmen von BMax-Fenstern entfernen

BeitragMo, Apr 26, 2010 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Für BlitzBasic gibt es bekanntlich BBSys.dll, aber das gibts halt nur für BB und ist ziemlich fett. mit vielen Funktionen, die man vielleicht nicht für sein Projekt braucht. Was also tun, wenn wenn einen dieser Rahmen um ein Fenster nervt, oder man gerne einen anderen hätte. (Z.B. einen, der Vergrößerbar ist). Alle diese Probleme gehören nun der Vergangenheit an, denn ich habe eine (simple) Lösung für dieses Problem gefunden. (Diese Lösung ist ersteinmal für OpenGl+Win32. Zusätzlich benötigt ihr MingW und am besten C-Kentnisse)

So gehts:

Bmax-Ordner öffnen -> Mod -> brl.mod -> glgraphics.mod

Nun erscheinen euch viele Dateien, doch nur zwei müssen wir verändern: glgraphics.win32.c und glgraphics.bmx

Nehmt euch zuerst glgraphics.win32.c, in einen Editor eurer Wahl öffnen, die Folgende Funktion finden und so bearbeiten:
Code: [AUSKLAPPEN]
BBGLContext *bbGLGraphicsCreateGraphics( int width,int height,int depth,int hertz,int flags ){
   BBGLContext *context;
   
   int mode;
   HDC hdc;
   HWND hwnd;
   HGLRC hglrc;
   
   long pf;
   PIXELFORMATDESCRIPTOR pfd;
   int hwnd_style;
   RECT rect={0,0,width,height};
   
   _initWndClass();
   
   if( depth ){
      mode=MODE_DISPLAY;
      hwnd_style=WS_POPUP;
   }else{
      HWND desktop = GetDesktopWindow();
      RECT desktopRect;
      GetWindowRect(desktop, &desktopRect);

      rect.left=desktopRect.right/2-width/2;      
      rect.top=desktopRect.bottom/2-height/2;      
      rect.right=rect.left+width;
      rect.bottom=rect.top+height;
      
      mode=MODE_WINDOW;
      hwnd_style=hwnd_style_lord; //das ist neu
   }
      
   AdjustWindowRectEx( &rect,hwnd_style,0,0 );
   
... //den Rest schreibe ich hier nicht hin...

Den Anfang der C-Datei nun "int hwnd_style_lord=WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX;" schreiben. Ungefähr hier hin:
Code: [AUSKLAPPEN]



extern int _bbusew;

static const char *CLASS_NAME="BlitzMax GLGraphics";
static const wchar_t *CLASS_NAMEW=L"BlitzMax GLGraphics";

int hwnd_style_lord = WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX; //hier ist es^^

typedef struct BBGLContext BBGLContext;

struct BBGLContext{
   BBGLContext *succ;
   int mode,width,height,depth,hertz,flags;
   
   HDC hdc;
   HWND hwnd;
   HGLRC hglrc;
};

//... hier gehts noch weiter

Ach ja: Für diese Änderung müsst ihr MingW32 auf eurem Computer haben. Und wenn ihr nicht wisst, ob ihr diese Datei richtig verändert, lasst es besser bleiben! BMax neuinstallieren macht nicht viel Spaß. Smile
Übrigens müsst ihr die Varibale hwnd_style_lord nicht so nennen. Ihr könnt sie auch hwnd_style_keks oder so nennen, dann müsst ihr aber jedes Auftreten dieser Variable entsprechd anpassen.

Weiter im Text:
Die Folgende Funtion müsst ihr einfügen um die Änderung von BM anzusprechen:
Code: [AUSKLAPPEN]
void bbSetHwndStyle(int new_hwnd_style){
   hwnd_style_lord=new_hwnd_style;
}

Jetzt schließen wir diese Datei und kümmern uns um glgraphics.bmx:

Den Teil einfach anpassen:
Code: [AUSKLAPPEN]
Extern
   Function bbGLGraphicsShareContexts()
   Function bbGLGraphicsGraphicsModes( buf:Byte Ptr,size )
   Function bbGLGraphicsAttachGraphics( widget,flags )
   Function bbGLGraphicsCreateGraphics( width,height,depth,hertz,flags )
   Function bbGLGraphicsGetSettings( context,width Var,height Var,depth Var,hertz Var,flags Var )
   Function bbGLGraphicsClose( context )   
   Function bbGLGraphicsSetGraphics( context )
   Function bbGLGraphicsFlip( sync )
   Function bbSetHwndStyle( style )
End Extern

Public

Function lord_SetHwndStyle(style:Int)
   bbSetHwndStyle(style)
End Function


Jetzt auch schließen, die Module neu kompilieren und: Tada. Das folgende Programm zeigt euch nun die Änderung:

BlitzMax: [AUSKLAPPEN]

SetGraphicsDriver GLMax2DDriver()


lord_SetHwndStyle($80000000)
Graphics 400,100
Flip
WaitKey()


Fertig.


Ich hoffe das Tut war einigermaßen verständlich. Kommtentare sind natürlich erwünscht. Falls ihr etwas nicht versteht, oder etwas einfach nur blöd geschrieben ist: Hier reinschreiben. Very Happy

Mfg Lord Stweccys

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG FAQs und Tutorials

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group