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

13.04.2007, 15:25

Listing 10.1

Hi alle zusammen,

Nach Ausführen des Quellcodes erscheint bei mir kein Fenster.
Die Funktion CreateWindowEx gibt NULL zurück.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    hWnd = CreateWindowEx(NULL,szClassName, "Das erste Fenster",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        100,100,
        300, 250,
        NULL,
        NULL,
        hInst,
        NULL);


Vielleicht findet jemand von euch meinen Fehler!

Gruß

CrazyPlaya
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

2

13.04.2007, 15:32

Klasse registriert? Parameter stimmen alle?

3

14.04.2007, 08:26

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
windowclass.cbSize = sizeof(WNDCLASSEX);
    windowclass.style = CS_HREDRAW | CS_VREDRAW;
    windowclass.lpfnWndProc = WindowProc;

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

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

    windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND + 1;

    windowclass.lpszMenuName = NULL;
    windowclass.lpszClassName = szClassName;

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


Parameter stimmen alle!
Klasse ist registriert.
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

4

14.04.2007, 08:49

Rückgabe von GetLastError ist ERROR_CANNOT_FIND_WND_CLASS
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Fred

Supermoderator

Beiträge: 2 121

Beruf: Softwareentwickler

  • Private Nachricht senden

5

14.04.2007, 09:38

Muss da statt dem szClassName nicht windowclass stehen?

6

14.04.2007, 10:15

@Fred: An welcher Stelle?

Wenn du in CreateWindowEx meinst, dann muss ich das verneinen laut MSDN wird dort der Klassenname als LPCTSTR übergeben.
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

7

14.04.2007, 11:00

Wird das Programm vielleicht einfach zu schnell beendet, weil du bisher nur das Fenster erzeugst und die WinMain zu Ende ist?
Zeig in jedem Fall mal den ganzen Code.
"Have you tried turning it off and on again?"

8

14.04.2007, 12:39

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
#include <windows.h>

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

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst,
                   LPSTR lpcmdline, int ncmdshow)
{
    WNDCLASSEX windowclass; //Struktur für Fenstereigenschaften

    HWND hWnd;//Fenster - Handle

    MSG message; //Nachricht

    DWORD dwErr;
    char szBuf[512];

    const char szClassName[] = "Erstes Fenster";
    windowclass.cbSize = sizeof(WNDCLASSEX);
    windowclass.style = CS_HREDRAW | CS_VREDRAW;
    windowclass.lpfnWndProc = WindowProc;

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

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

    windowclass.hbrBackground = (HBRUSH) COLOR_BACKGROUND + 1;

    windowclass.lpszMenuName = NULL;
    windowclass.lpszClassName = szClassName;

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

    hWnd = CreateWindowEx(NULL,windowclass.lpszClassName , "Das erste Fenster",
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        100,100,
        300, 250,
        NULL,
        NULL,
        hInst,
        NULL);

    if(hWnd == NULL)
    {
        dwErr = GetLastError();
        return 0;
    }
    

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

    return (int) (message.wParam);
}

LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_DESTROY: {
                        PostQuitMessage(0);
                        return 0;
                     }
    case WM_KEYDOWN: {
                        switch(wParam)
                        {
                        case VK_ESCAPE:
                            {
                                PostQuitMessage(0);
                                return 0;
                            }
                        }
                     }break;
    }
    return (DefWindowProc(hWnd, message, wParam, lParam));

}


So hier der ganze Code, ich denke aber mal nicht, dass das Programm zu schnell beendet wird.
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Chase

Alter Hase

Beiträge: 753

Wohnort: Nagaoka / Darmstadt / Düsseldorf

Beruf: fauler Studi

  • Private Nachricht senden

9

14.04.2007, 13:00

Ich habs einfach mal mit meinem Standard-Codefetzen verglichen: du hast bloss vergessen deine Fensterklasse zu nullen!
Wenn man

C-/C++-Quelltext

1
ZeroMemory(&windowclass,sizeof(windowclass));

hinzufuegt klappts.
"Have you tried turning it off and on again?"

10

14.04.2007, 15:01

Ja das wars.
Aber vergessen kann man das nicht nennen, steht im Buchbeispiel nur nicht drin.
Klar wenn ich etwas genauer debuggt hätte, wäre ich vlt. auch noch drauf gekommen, aber da denkt man ja erst ma nicht drüber nach, wenn man ein Beispiel abpinnt:)
Besten Dank für eure Mühen
Arbeitswut ist eine psychische Störung, die schon mit einer Tasse Kaffee und einem netten Gespräch geheilt werden kann

Werbeanzeige