Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.09.2009, 22:17

Kapitel 10, kein Fenster sichtbar

Der erste Quellcode aus Kapitel 10 lässt sich zwar ohne Probleme kompilieren und ausführen,
es ist aber kein Fenster sichtbar, egal ob über Strg+5,
als debug oder release.

Ich benutze Windows-Vista.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include <windows.h>
 
//Prototyp der Callback-Funktion

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLinde, int nShowCmd)
{
    WNDCLASSEX windowclass; //Struct für die Fenstereigenschaften

    HWND hWnd; //Fenster-Handle

    MSG message; //Nachricht


    //Der Klassen-Name des Fensters ist frei wählbar

    const char szClassName[] = "Erstes Fenster";

    //Struct mit geigneten Werten füllen


    //Größe des Structs zwischenspeichern

    windowclass.cbSize = sizeof(WNDCLASSEX);
    //Fenster soll beim Verschieben neu gezeichnet werden

    windowclass.cbSize = CS_HREDRAW | CS_VREDRAW;
    //Zeiger auf Callback-Funktion

    windowclass.lpfnWndProc = WindowProc;

    //Keine erweiterten Einstellungen

    windowclass.cbClsExtra = 0;
    windowclass.cbWndExtra = 0;

    //Instanz speichern

    windowclass.hInstance = hInst;

    //Icons und Cursor festlegen

    windowclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    windowclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    windowclass.hCursor = LoadCursor(NULL, IDC_ARROW);

    //Hintergrundfarbe festlegen

    windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;

    //Ein Menü brauchen wir nicht = NULL;

    windowclass.lpszMenuName = NULL;

    //Klassenname angeben

    windowclass.lpszClassName = szClassName;

    //Fensterklasse registrieren

    if(!RegisterClassEx(&windowclass))
        return 0;

    //Das Fenster erzeugen

    hWnd = CreateWindowEx(NULL, szClassName, "Das erste Fenster!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 300, 250, NULL, NULL, hInst, NULL);
    
    //Prüfen ob alles glatt ging

    if (hWnd == NULL)
        return 0;

    while (GetMessage(&message, NULL, 0, 0) )
    {
        TranslateMessage(&message);
        DispatchMessage(&message);
    }

    //Programm beenden

    return (int)(message.wParam);
} //WinMain


//Callback-Funktion zur Nachrichtenverarbeitung

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    //Message auswerten

    switch (message)
    {
        //Fenster schließen? (Auch Alt + F4)

    case WM_DESTROY:
        {
            //Nachricht zum Beenden schicken

            PostQuitMessage(0);
            return 0;
        }

    case WM_KEYDOWN:
        {
            //Ja, also je nach Taste verzweigen

            switch (wParam)
            {
                //Wurde "Escape" gedrückt?

            case VK_ESCAPE:
                {
                    //Ja, also Nachricjt zum Beenden schicken

                    PostQuitMessage(0);
                    return 0;
                }
            }
        } break;
    }
    /*Die Nachricht wurde nicht von uns verarbeitet, also von Windows verarbeiten lassen*/
    return (DefWindowProc(hWnd, message, wParam, lParam));
}//WindowProc

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

07.09.2009, 22:20

Ist das Fenster nur unsichtbar oder wird es gar nicht erzeugt (bleibt hWnd 0)...

3

07.09.2009, 22:21

Es ist in der Taskleiste nichts sichtbar und es blitzt auch nichts auf.
Danke für die schnelle Antwort

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

07.09.2009, 22:24

Und was sagt der Debugger, wird das Fenster jetzt erzeugt oder nicht^^

5

07.09.2009, 22:29

Jau soweit ich dass sehen kann bleibt hwnd NULL.
Da steht

Zitat

hWnd 0xcccccccc {unused=??? } HWND__ *

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

07.09.2009, 22:34

Kann es sein dass dein Programm sich schon beendet bevor es überhaupt versucht das Fenster zu erzeugen? Das RegisterClassEx() kann ja auch schon fehlschlagen. Tu halt mal schrittweise debuggen oder setz einen Breakpoint auf das return...

7

07.09.2009, 22:39

C-/C++-Quelltext

1
2
3
4
    //Größe des Structs zwischenspeichern 

    windowclass.cbSize = sizeof(WNDCLASSEX); 
    //Fenster soll beim Verschieben neu gezeichnet werden 

    windowclass.cbSize = CS_HREDRAW | CS_VREDRAW; 


Das untere sollte wohl windowclass.style heißen!? :roll:

8

07.09.2009, 22:49

Danke! Du bist mein Held :)

Werbeanzeige