Pause bei Fensterbewegung durch User verhindern
Übersicht

PacManiBetreff: Pause bei Fensterbewegung durch User verhindern |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das stimmt, das ist etwas aufwendiger ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group