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

Doniel

Frischling

  • »Doniel« ist der Autor dieses Themas

Beiträge: 29

Wohnort: Erbach im Rheingau

Beruf: Schüler

  • Private Nachricht senden

1

06.02.2004, 16:17

Problem mit DialogBox() [Problem gelöst]

Hi, ich bin hier am verzweifeln, ich weiß, da ist so ein ganz dummer Fehler in dem folgenden code, aber ich finde ihn nicht.
Also, der folgende code sollte eigendlich ein Fenster erstellen, das mehr oder weniger genau so aussieht, wie der Dialog, IDD_MAIN, den ich mit VC++ zusammengesetzt habe.
Leider sehe ich das Fenster nicht, die Buttons und Textfelder vom Dialog werden angezeigt, und wenn ich auf Beenden (IDC_QUIT) klicke schließt sich das Programm auch. (Das Icon wird auch richtig in der Taskleiste angezeigt.)

Wäre prima, wenn mir jemand helfen könnte. :help:

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
33
34
35
36
37
38
39
40
41
42
#include <Windows.h>
#include "Resource.h"

INT_PTR CALLBACK DialogProc(HWND hDlg, unsigned int uiMsg, WPARAM WParam, LPARAM LParam)
{
    switch(uiMsg)
    {
    case WM_INITDIALOG:
        // Icon setzen
        SetClassLong(hDlg, GCL_HICON, (LONG)(LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1))));
        break;

    case WM_CLOSE:
        EndDialog(hDlg, 0);
        break;

    case WM_COMMAND:
        switch(LOWORD(WParam))
        {
        case IDC_QUIT:
            // Dialog beenden
            EndDialog(hDlg, 0);
            break;
        }
        break;
    }
    return TRUE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, char* pcCmdLine, int iShowCmd)
{
    // Den Dialog aufrufen
    if(DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DialogProc))
    {
        // Es trat ein Fehler auf!
        MessageBox(NULL, "Fehler beim initialisieren des Fensters!",
                   "Fehler", MB_OK | MB_ICONEXCLAMATION);
        return 1;
    }

    return 0;
}

2

06.02.2004, 16:37

Die Nachrichten WM_CLOSE & WM_COMMAND liefern NULL zurück wenn sie verarbeitet wurden.

Zitat

If an application processes this message, it should return zero.


Ansonsten kann ich keinen Fehler finden.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

3

06.02.2004, 16:38

In der DialogProc muss es so aussehen (Du hast den Rückgabewert falsch programmiert):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch(Message)
{
    case ...
        break;

    case ...
        break;

    default:
        return FALSE;
        break;
}

return TRUE;


TRUE, wenn die Nachricht verarbeitet wurde (in Deiner DialogProc).
FALSE, falls nicht.

Doniel

Frischling

  • »Doniel« ist der Autor dieses Themas

Beiträge: 29

Wohnort: Erbach im Rheingau

Beruf: Schüler

  • Private Nachricht senden

4

06.02.2004, 16:49

Ah, das war klar, so ein kleiner Fehler mit so großen Folgen. Es funktioniert jetzt, wenn ich noch das default einbaue,
Also vielen, vielen Dank! :huhu:

Werbeanzeige