PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Windows und SystemMetrics und C


Dr.Doom
2014-06-27, 09:38:05
Howdy,

ich versuche mich gerade an einem Tetris-Spiel in nacktem C mit GDI.

Es gibt bisher zwei Windows:
Einmal das Hauptfenster mit Menubar, Titelleiste usw. und dann noch das Spielfeldfenster für die Klötze.

Die Blöcke haben eine feste Dimension von 30x30 Pixeln. Zwischen Blöcken und dem Fensterrand soll jeweils ein Pixel Abstand sein.
D.h., die Größenangabe für das Spielfeldfenster sind durch cxPlayfield und cyPlayfield vorgegeben.

Jetzt soll das Hauptfenster das Spielfeldfenster umschliessen.
(Genaugenommen soll das Spielfeldfenster die linken 2/3 des Hauptfensters einnehmen, um auf dem rechten Drittel noch Buttons, Punkteanzeige usw anzeigen zu lassen --- aber das lassen wir erstmal ausser Acht).

D.h., die Höhenangabe für das Hauptfenster müsste doch eigentlich wie folgt lauten:

cyMainWindow =
cyPixelPlayfield
+ GetSystemMetrics(SM_CYCAPTION)
+ 2*GetSystemMetrics(SM_CYSIZEFRAME)
+ GetSystemMetrics(SM_CYMENU);


Eigentlich... aber offenbar nicht (siehe Bild), da das Spielfeldfenster grösser ist als das Hauptfenster, d.h. ich habe noch nciht genug auf die Spielfeldgröße draufgerechnet.

Was fehlt denn da noch? Titelleiste, Menü, 2xRand.... und?!

Anstatt SM_CYSIZEFRAME habe ich auch mal SM_CYBORDER und SM_CYEDGE ausprobiert. Aber, nunja...

Ectoplasma
2014-06-28, 01:08:06
Wie wäre es mit AdjustWindowRectEx?

Dr.Doom
2014-06-28, 11:17:25
Hmm, ok, danke. Hab' halt noch wenig Ahnung von dem C/Win32-Zeugs. :redface:
Komme mehr aus der Java-Richtung, wo man nicht so sehr an den Fundamenten schrauben muss. :ugly:

Interessanterweise passt das Spielfeld-Fenster unter Win8 haargenau, während unter Win 7 zwischend dem unteren Rand des Hauptfensters und dem unteren Rand des Spielfeldfensters noch ein Pixel Abstand/Zwischenraum ist.


http://www.forum-3dcenter.org/vbulletin/attachment.php?attachmentid=48981&stc=1&d=1403946863

ScottManDeath
2014-06-28, 13:45:25
Schick :)

Aber gibt es einen speziellen Grund (abgesehen von "Weil ich's kann" :D) warum gerade diese Sprach- und APIkombination?

Dr.Doom
2014-06-28, 14:20:48
Wegen der baldigen Pflege einer antiken Anwendung, die nur aus C, GDI und einem Haufen Spaghetti besteht - da will ich zumindest den C- und GDI-Teil habwegs verstehen können. :freak:

Ectoplasma
2014-06-29, 01:34:16
Hmm, ok, danke. Hab' halt noch wenig Ahnung von dem C/Win32-Zeugs. :redface:

Musst du ja auch nicht. Sorry für die etwas knappe Antwort von mir. War halt schon spät. Dein Tetris Projekt finde ich clever, weil man viele Dinge lernen kann und es sieht ordentlich aus.