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...
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...