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

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

31

11.05.2008, 22:11

Hallo Zeus

In Deinem Listing fallen mir ein paar Sachen auf:

Es fehlt in der LRESULT CALLBACK WindowProc(..
WM_Create und
WM_ Paint

Das brauchst Du meiner Meinung nach, wenn Du überhaupt ein Windows haben willst

Die return-Werte würde ich auf 0 setzen

Wenn ich mit dem Buchcode arbeiten will, deaktiviere ich UNICODE. Dies kann man in Projekteigenschaften/Konfigurationseigenschaften/Allgemein den Zeichensatz von Unicode auf „nicht festgelegt“ ändern (Bei MS Visual Studio 2005).

Bis denn

Terep
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Zeus

Frischling

Beiträge: 83

Beruf: Schule

  • Private Nachricht senden

32

11.05.2008, 22:35

das mit den return hab ich gemacht um zu wissen wos hackt ...

und ich habs so aus dem buch abgetippt (auser return)

Terep

Frischling

  • »Terep« ist der Autor dieses Themas

Beiträge: 46

Wohnort: Region Hannover

  • Private Nachricht senden

33

12.05.2008, 07:17

Hallo Zeus

Mich macht es frustig wenn Buch-Code nicht funktioniert. Daher habe ich mir mehrere Bücher geholt. Charles Petzold Windowsprogrammierung 5. Auflage ist hier sehr zu empfehlen.

Deinen Quellcode habe ich heruntergeladen und daran rumgemacht. Nicht jede gemachte Änderung ist nötig. Aber bei mir läuft es ohne Fehlermeldung.

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
98
99
100
101
102
103
104
# include <windows.h> 

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


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow){ 
    
    WNDCLASS        windowclass; 
    HWND            hWnd; 
    MSG             msg; 

    static TCHAR szClassName[] = TEXT("Das erste Fenster"); 

 //   windowclass.cbSize = sizeof(WNDCLASSEX);        //zwischensp. größe struct 


    windowclass.style = CS_HREDRAW | CS_VREDRAW;    //neuzeichnen des feinsters bei verschiebung 


    windowclass.lpfnWndProc = WindowProc;            // pointer @ callback 


    windowclass.cbClsExtra = 0; 
    windowclass.cbWndExtra = 0; 
    windowclass.hInstance = hInstance;
    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(!RegisterClass(&windowclass)) return 0; 

    hWnd = CreateWindow (   
                            szClassName, 
                            TEXT("Das erste Fenster!"), 
                            WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
                            100, 100, 
                            300, 250, 
                            NULL, 
                            NULL, 
                            hInstance, 
                            NULL); 

    //if(hWnd == NULL) return 0; 


     ShowWindow (hWnd, iCmdShow) ;
     UpdateWindow (hWnd) ;



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

    return msg.wParam; 
}        //winmain 


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

    HDC hdc;
    PAINTSTRUCT ps ;
    RECT        rect ;

    switch(message) 
    { 

     case WM_PAINT:
          hdc = BeginPaint (hWnd, &ps) ;
          
          GetClientRect (hWnd, &rect) ;
          
          DrawText (hdc, TEXT ("Hallo, Zeus. Du schaffst es!"), -1, &rect,
                    DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

          EndPaint (hWnd, &ps) ;
          return 0 ;




    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)); 
}



Hoffentlich kommst Du damit zurecht

Gruß

Terep :)
Avatar = „Odyssee im Weltraum“
Film von Stanley Kubrick (Warner Brothers)
nach dem Buch von Arthur C. Clarke.
It will becoming true ?!!

Zeus

Frischling

Beiträge: 83

Beruf: Schule

  • Private Nachricht senden

34

12.05.2008, 14:53

Zitat von »"Terep"«

Hallo Zeus

Mich macht es frustig wenn Buch-Code nicht funktioniert. Daher habe ich mir mehrere Bücher geholt. Charles Petzold Windowsprogrammierung 5. Auflage ist hier sehr zu empfehlen.



hab ich auch :-D

vielen dank erstmal für den code, funktioniert super, danke :-D

mfg zeus

ps: hast du ts ?

Zeus

Frischling

Beiträge: 83

Beruf: Schule

  • Private Nachricht senden

35

13.05.2008, 14:54

so, ich hab den fehler gefunden,

falsch ist das im buch verwendete

C-/C++-Quelltext

1
hWnd = CreateWindowEx (...)


es muss einfach nur

C-/C++-Quelltext

1
hWnd = CreateWindow(...)


heißen, (ka why)

auch muss bei allem in den (...) wo irgentwie ein text genutzt wird die unicode "dekleration" oder wieauchimmer verwendet werden

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
    static TCHAR szClassName[] = TEXT("Das erste Fenster"); 

    hWnd = CreateWindow ( szClassName, 
                          L"Das erste Fenster", 
                          WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
                          100, 100, 
                          900, 500, 
                          NULL, 
                          NULL, 
                          hInstance, 
                          NULL);


so und dann gehts auch mit unicode nach den bsp's, ich nehm halt mal an die fehler rühren daher dass das buch einen compiler nutzt welcher unicode nicht default hat ...

sofar...

Zeus

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

36

13.05.2008, 15:06

Das ist im Grund kein Fehler sondern nur inkompatibel zu Unicode.
Man kann auch beides unterstützen:

C-/C++-Quelltext

1
2
3
4
5
#include <tchar.h>

static PTCHAR szClassName = _T( "Das erste Fenster" );

hWnd = CreateWindow( szClassName, _T( "Das erste Fenster" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 900, 500, NULL, NULL, hInstance, NULL );


Und selbstverständlich funtkioniert auch CreateWindowEx:

C-/C++-Quelltext

1
hWnd = CreateWindowEx( 0, szClassName, _T( "Das erste Fenster" ), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 900, 500, NULL, NULL, hInstance, NULL );


Anmerkung:
Der erste Parameter sind erweiterte Styleflags: http://msdn.microsoft.com/en-us/library/ms632680(VS.85).aspx
@D13_Dreinig

Zeus

Frischling

Beiträge: 83

Beruf: Schule

  • Private Nachricht senden

37

13.05.2008, 21:08

hm also dann mache ich mit dem ex iwas falsch so wie ich es nutze, bei mir flamet er immer von wegen

"1>.\main.cpp(46) : error C2660: 'CreateWindowExW': Funktion akzeptiert keine 11 Argumente"

aber keine sorge das "W" hat der compiler beim fehler dazu ...

mfg

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

38

14.05.2008, 06:41

CreateWindowEx benötigt ja auch 12 (in Worten: zwölf) Parameter. Man beachte die 0 ganz am Anfang, in meinem Beispiel.

Das W rührt daher das der Compiler automatisch die Unicodevariante verwendet. Das ANSI Equivalent heißt übrigens CreateWindowExA.
@D13_Dreinig

Zeus

Frischling

Beiträge: 83

Beruf: Schule

  • Private Nachricht senden

39

14.05.2008, 12:13

tatsache, danke

Werbeanzeige