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

06.03.2007, 15:37

Versage bei einer einfachen dialogbox!

Hallo!
Ich hab mir mal die tuts hier angesehen: http://www.functionx.com/win32/Lesson04.htm

Doch selbst das will nicht klappen! hier mal der code:

resource.h

C-/C++-Quelltext

1
#define IDD_MAIN 100


resource.rc

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include "resource.h"

IDD_MAIN DIALOG 260, 200, 188, 95
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Win32 Programming"
FONT 8, "MS Shell Dlg"
BEGIN
    DEFPUSHBUTTON   "OK", IDOK, 130, 10, 50, 14
END


main.cpp

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

bool done=false;
HWND hWnd;

LRESULT CALLBACK DlgProc(HWND hWndDlg, UINT Msg, WPARAM wParam, LPARAM lParam)
{
switch(Msg)
    {
    case WM_INITDIALOG:
        return TRUE;

    case WM_COMMAND:
        switch(wParam)
        {
        case IDOK:
             done=true;
            EndDialog(hWndDlg, 0);
            return TRUE;
        }
        break;
    }

    return FALSE;
}


INT WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   char* pcCmdLine,
                   int iShowCmd)
{
    MessageBox( NULL, "Davor", "dsa",  MB_OK | MB_ICONHAND);

    DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN),
              hWnd, reinterpret_cast<DLGPROC>(DlgProc));

           
    MessageBox( NULL, "Danach", "dsa",  MB_OK | MB_ICONASTERISK);
    return true;
}


Was mach ich da falsch?

Gruß Flo

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

2

06.03.2007, 15:57

Der Rückgabewert von DLGPROC ist INT_PTR und nicht LRESULT. Dann kannst du auch den reinterpret_cast weglassen. Das Problem dürfte jedoch folgendes sein:

C-/C++-Quelltext

1
switch(wParam)
Du musst da

C-/C++-Quelltext

1
switch(LOWORD(wParam))
schreiben.
Siehe dazu auch die Beschreibung von WM_COMMAND in der MSDN.
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

06.03.2007, 17:09

vermutlich ist das der fehler.
der Rückgabewert von DlgProc sollte aber BOOL sein ;)

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

4

06.03.2007, 17:36

Da behauptet die MSDN aber was anderes
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

06.03.2007, 17:39

http://msdn2.microsoft.com/en-us/library/aa921593.aspx

^^ meine offline version war auch für BOOL...strange

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

6

06.03.2007, 17:45

^^ meine Offline-Version ist für INT_PTR

Naja, INT_PTR ist ein Typedef für __w64 int und BOOL ist ein Typedef für int. Ich hab zwar keine Ahnung was __w64 bedeutet aber der Unterschied wird wohl nicht gross sein...
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

06.03.2007, 17:48

Zitat von »"MSDN"«

(Microsoft Specific) Lets you mark variables, such that when you compile with /Wp64 the compiler will report any warnings that would be reported if you were compiling with a 64-bit compiler.


ok, nicht wirklich ein großer unterschied^^

ich hab das mit INT_PTR aber ehrlich gesagt noch nie gesehen^^

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

8

06.03.2007, 18:31

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
switch(Msg) 
    { 
    case WM_INITDIALOG: 
        return TRUE; 

    case WM_COMMAND: 
        switch(wParam) 
        { 
        case IDOK: 
             done=true; 
            EndDialog(hWndDlg, 0); 
            return TRUE; 
        } 
        break; 
    } 

    return FALSE; 

Das mit dem LOWORD dürfte egal sein....ansonsten müsste es auch case WM_COMMAND:
switch(HIWORD()) sein...

der obige codeausschnitt sieht echt nach nem ordentlichen kuddlmuddl aus...überarbeiten wäre nicht schlecht...

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

06.03.2007, 19:15

das is ziemlich sicher nicht egal ;)

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

10

04.04.2007, 09:40

Nun ich meine ich hätte es auch mal geschafft, ohne das ich LOWODR benutzt hab...


naja kann aber auch gut sein dass ich mich täusche... jedenfalls benutze ich IMMER INT_PTR und mit BOOL hab ichs noch nie gesehen...

mfg,

Faule Socke

Werbeanzeige