Pause bei Fensterbewegung durch User verhindern

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

PacMani

Betreff: Pause bei Fensterbewegung durch User verhindern

BeitragSo, Sep 25, 2011 12:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

wenn der Anwender das Spiel im Fenstermodus ausführt, kann er natürlich mit der Maus das Fenster beliebig verschieben.
Während er das Fenster verschiebt, pausiert das Spiel allerdings. Das ist ziemlich störend bei einer zeitrelevanten Anwendung. Weiß jemand, ob man diese "Pause" verhindern kann?

Gruß,
Pac-Man

Der Eisvogel

BeitragSo, Sep 25, 2011 13:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist leider ein Problem von der Blitz internen Nachrichten-Verwaltung. Du könntest diese Nachrichten abfangen, jedoch müsstest du dich da einer DLL bedienen.
Der einfacherer Weg ist, den Fensterrahmen zu entfernen und ihn selbst zu malen. Dann einen Bereich definieren in dem die Maus das Fenster verschieben kann und die Verschiebung mittels SetWindowsPos selbst durchführen.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

PacMani

BeitragSo, Sep 25, 2011 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das klingt gut und ähnlich dem, woran ich dachte. Nur habe ich leider nicht viel Ahnung von Userlibs bzgl. WndProc verändern. Gibt es da ein paar Tipps?
Auch wüsste ich nicht, wie ich den Fensterrahmen selber zeichnen kann, geht das überhaupt noch problemlos unter Windows Vista / 7 / 8 mit aktivierter Aero-Oberfläche? Der DWM meint ja, vieles trotzdem zu machen obwohl man es ihm abnehmen will.

skey-z

BeitragSo, Sep 25, 2011 15:26
Antworten mit Zitat
Benutzer-Profile anzeigen
In der BPS war mal was ähnliches gefordert, mit WaitTimer() kann due die vergangenen Ticks abfangen, im normalen Betrieb liegt diese Zahl bei 1, wenn das Fenster verschoben wird natürlich höher.

Nun kannst du in einer for Schleife alles nachholen, was hätte in der Zeit, inder das Fenster verschoben wurde.

Code: [AUSKLAPPEN]

for i=0 to ticks
   machwas()
next


Vielleicht hilft dir das ja
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

PacMani

BeitragSo, Sep 25, 2011 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, ich habe schon FPS-unabhängig programmiert. Aber mich interessiert mehr der technische Aspekt dabei, was nötig wäre, um diese Pause zu unterbinden.

Der Eisvogel

BeitragSo, Sep 25, 2011 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Um den Rahmen zu entfernen musst du mittels SetWindowLong den Style Parameter so setzten, dass das Rahmen-Flag nicht mehr da ist. Wie genau die Konstanten heißen weiß ich nicht ausm Kopf, steht aber alles auf MSDN. Damit der Rahmen dann auch verschwindet, musst du das Fenster aktualisieren lassen, am einfachsten geht das über ShowWindow, einmal verstecken und wieder anzeigen.
Wenn ich mich richtig erinnere, dann muss man auch noch mittels SetWindowPos die Größe des Fensters neu setzen, da sonst die Grafik verzogen ist.

Jetzt kannst du ganz einfach mit den Draw-Befehlen von Blitz einen eigenen Rahmen malen. Wenn man mit der Maus im oberen Teil des Fenster drückt, dann verschiebst du das Fenster mit SetWindowPos von Hand.

Wenn du aber den Windows eigenen Rahmen beibehalten willst, musst du dir eine DLL coden, die ein WndProc beinhaltet und die Nachricht abfängt und behandelt, und alle anderen an den alten WndProc weitergibst. Allerdings könnte das etwas komplizierter werden, durch die benötigte DLL.
Ungarische Notation kann nützlich sein.
BlitzMax ; Blitz3D
Win 7 Pro 64 Bit ; Intel Core i7-860 ; 8 GB Ram ; ATI HD 5750 1 GB
Projekte: Window-Crasher
Ich liebe es mit der WinAPI zu spielen.
 

PacMani

BeitragSo, Sep 25, 2011 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Das stimmt, das ist etwas aufwendiger Sad aber das habe ich mir schon gedacht. Mal sehen was ich mir zusammenbastele.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group