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

Anonymous

unregistriert

1

12.09.2003, 18:07

Exception bei CreateWindowEx

Hallo!

Ich habe folgendes Problem:

Ich erstelle ein Fenster:

Quellcode

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
WNDCLASSEX WindowClass = {sizeof (WNDCLASSEX), 
                              CS_CLASSDC | CS_VREDRAW | CS_HREDRAW, 
                              WindowProc, 
                              0, 
              0,
              Instance, 
              LoadIcon (Instance, MAKEINTRESOURCE (IDI_LOGO)), 
              NULL, 
              NULL,
              NULL, 
              "Direct3D Window", 
              NULL};

Window = CreateWindowEx (0,
         "Direct3D Window",
                                         "Title"
         WS_VISIBLE | WS_OVERLAPPEDWINDOW,
         0,
         0,
        GetSystemMetrics (SM_CXSCREEN),
        GetSystemMetrics (SM_CYSCREEN),
        NULL,
        NULL,
        Instance,
        NULL);

Alle Variablen sind deklariert.
Es wird auch wie geplant WindowProc mit WM_CREATE aufgerufen. Dann wird aber eine Exception ausgelöst.
Der Witz: Wenn ich diese Exception aber in der WinMain-Funktion abfange

Quellcode

1
2
3
4
5
6
7
8
try
{
/* ... */
}
catch (...)
{
MessageBox (NULL, "Exception abgefangen!", "Warnung!", 48);
}

, dann wird in der MessageBox-Funktion eine Ausnahme ausgelöst wird.
Lasse ich aber diese Anweisung weg, so wird die Exception wie geplant abgefangen und keine weitere Ausnahme ausgelöst.

Wie kann ich das Problem lösen?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

12.09.2003, 18:16

Registriere erst die Fensterklasse!

Anonymous

unregistriert

3

12.09.2003, 18:22

Tschuldingung, hab ich natürlich gemacht, habs nur nicht gepostet. Außerdem würde CreateWindowEx ja dann wohl NULL bzw. 0 zurückgeben.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

12.09.2003, 18:36

Zeige mal Deine WindowProc.

Anonymous

unregistriert

5

12.09.2003, 18:41

Quellcode

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
//Nachrichtenverarbeitung
LRESULT WINAPI WindowProc (HWND aWindow,
                           unsigned int Message,
                           WPARAM WParam,
                           LPARAM LParam)
{
//Fallunterschiedung
switch (Message)
    {
    case WM_CREATE:
        #ifdef DEBUG
        //Hinweis geben
        MessageBox (NULL, "Das Fester wurde erfolgreich erstellt.", "Hinweis!", 64);
        #endif //DEBUG
        return TRUE;

    case WM_ACTIVATE: 
        pKeyboard->Acquire ();
        pMouse->Acquire ();
        return TRUE;

    case WM_DESTROY:
        DestroyWindow (aWindow);
        PostQuitMessage (0);
        return TRUE;
        
    default:
        return DefWindowProc (aWindow, 
                              Message, 
                              WParam, 
                              LParam);
    }

6

15.09.2003, 16:37

hehe...lies dir mal dir mal die MSDN durch.

Zitat

Return Values
If an application processes this message, it should return zero to continue creation of the window. If the application returns –1, the window is destroyed and the CreateWindowEx or CreateWindow function returns a NULL handle.

Wenn eine Nachricht verarbeitet wurde wird immer NULL geliefert.

Quellcode

1
MessageBox (NULL, "Das Fester wurde erfolgreich erstellt.", "Hinweis!", 64);
Was macht die 64 da? Nimm die Konstanten dafür sind die ja da ;) (MB_OK | MB_ICONEXCLAMATION).

Es kann auch an deiner WM_ACTIVATE Message liegen. Ich weis zwar jetzt nett welche Nachrichten alle gesendet werden, wenn das Prog startet, aber Kommentier mal deinen Code in der Message aus. Ich denke das hier der Fehler liegt.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige