kostenloser Webspace werbefrei: lima-city


wo ist hier der fehler?

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    andieo

    Kostenloser Webspace von andieo

    andieo hat kostenlosen Webspace.

    ich wei? nicht ob sich das jetzt jemand antut und alles durguckt aber ich f?nds wirklich cool von euch!

    //Frame.cpp

    //INCLUDES////////////////////////////////////////

    #include <windows.h>
    #include "Frame.h"

    //GLOBALS/////////////////////////////////////////

    BOOL done;
    int Spiel_Zustand;
    HWND hwnd;

    //FUNKTIONEN//////////////////////////////////////

    //CALLBACK FUNKTION

    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    {
    switch(message)
    {
    case WM_DESTROY:
    {
    done = TRUE;
    PostQuitMessage(0);
    return(0);
    } break;
    case WM_KEYDOWN:
    switch (wparam)
    {
    case VK_ESCAPE:
    {
    PostMessage(hwnd, WM_CLOSE, 0, 0);
    return 0;
    } break;
    } break;
    default:break;
    } //switch zu Ende
    return (DefWindowProc(hwnd, message, wparam, lparam));
    } //Window Proc zu Ende

    //Startfunktionen

    int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprevinst, LPSTR lpcmdline, int ncmdshow)
    {

    WNDCLASSEX winclass;
    MSG message;
    const char szclassname[] = "Klassenname";
    DWORD loop_start_time;

    winclass.cbSize = sizeof(WNDCLASSEX);
    winclass.style = CS_HREDRAW | CS_VREDRAW;
    winclass.lpfnWndProc = WindowProc;
    winclass.cbClsExtra = 0;
    winclass.cbWndExtra = 0;
    winclass.hInstance = hinst;
    winclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winclass.hCursor = LoadCursor(NULL, IDC_ARROW);
    winclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winclass.lpszClassName = szclassname;
    winclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

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

    // Handle zum erzeugen des globalen Fensters

    if (!(hwnd = CreateWindowEx(NULL, szclassname, "3D Spieleprogrammierung - Titelleiste", WS_POPUPWINDOW | WS_VISIBLE, 0, 0, 400, 300, NULL, NULL, hinst, NULL)))
    return(0);

    ShowWindow(hwnd, ncmdshow);
    UpdateWindow(hwnd);

    done = FALSE;
    Spiel_Zustand = SPIEL_AUSWAHL;

    //Phase1:
    Spiel_Intialisieren();

    //Phase2:
    //HAUPTSCHLEIFE///////////////////////////////////////////////
    while(!done)
    {
    while(GetMessage(&message,NULL,0,0))
    {
    TranslateMessage(&message);
    DispatchMessage(&message);
    } //PEEKMESSAGE

    //Startzeit der Hauptschleife
    loop_start_time = GetTickCount();

    switch(Spiel_Zustand)
    {
    case SPIEL_AUSWAHL:
    {
    //code
    Spiel_Zustand = SPIEL_START;
    } break;
    case SPIEL_LAUEFT:
    {
    //Alles f?rs Game...
    } break;
    case SPIEL_NEUSTART:
    {
    //code
    Spiel_Zustand = SPIEL_START;
    } break;
    default:break;
    } //switch zu Ende

    //Framebremse

    while ( (GetTickCount() - loop_start_time) < 20);
    } //Hauptschleife zu Ende

    //Phase 3:
    Spiel_Beenden();

    return message.wParam;

    } // WinMain zu Ende

    //Phase1:
    int Spiel_Intialisieren(void)
    {
    //zu Erledigen:
    //Intialisierungen
    return 1;
    }

    //Phase3:
    int Spiel_Beenden(void)
    {
    //zu Erledigen:
    //Speicher freigeben etc.
    return 1;
    }



    //Frame.h

    //DEFINITIONEN////////////////////////////////////

    #define WIN32_LEAN_AND_MEAN
    #define SPIEL_AUSWAHL 0
    #define SPIEL_START 1
    #define SPIEL_LAUEFT 2
    #define SPIEL_NEUSTART 3

    //MAKROS//////////////////////////////////////////

    //noch keine vorhanden

    //PROTOTYPEN//////////////////////////////////////

    int Spiel_Intialisieren(void);
    int Spiel_Beenden(void);


    Beitrag ge?ndert am 24.11.2005 16:17 von andieo
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. r*****r

    ich hab durchgeguckt, es sind alles klammernpaare, das hei?t, es fehlt keine klammer.

    Beitrag ge?ndert am 24.11.2005 16:22 von ruehrer
  4. Autor dieses Themas

    andieo

    Kostenloser Webspace von andieo

    andieo hat kostenlosen Webspace.

    eine anmerkung: der compiler meldet keinen fehler, dass problem ist das wenn ich es ausf?hre das programm sofort abst?rzt...
  5. Hmmm ich hab's mal getestet (unter BCB und VC++) es wird richtig kompiliert und auch ausgef?hrt ohne Probs also kein Absturz.
    Aber man sollte mal anmerken das frame.h nen Header ist der im Includeverzeichnis schon besteht also gib dem mal nen anderen Namen und um mehrmaliges includen zu verhindern solltest den Inhalt von frame.h mal so ?ndern

    #ifndef frameH
    #define frameH frameH
    //Frame.h

    //DEFINITIONEN////////////////////////////////////

    #define WIN32_LEAN_AND_MEAN
    #define SPIEL_AUSWAHL 0
    #define SPIEL_START 1
    #define SPIEL_LAUEFT 2
    #define SPIEL_NEUSTART 3

    //MAKROS//////////////////////////////////////////

    //noch keine vorhanden

    //PROTOTYPEN//////////////////////////////////////

    int Spiel_Intialisieren(void);
    int Spiel_Beenden(void);
    #endif //frameH


    Zu deinem eigentlichen Prob guck mal alle Compiler/Linkereinstellung Flags etc. durch ob da nicht was falsch eingestellt ist und der was falsch Link

    Aso w?re sch?n zu wissen welchen Compiler du benutzt.

    Beitrag ge?ndert am 24.11.2005 17:49 von funkdoobiest
  6. 0******a

    Das Problem liegt an der Stelle, wo du deinen Quelltext mit "Phase 2\r\nHauptschleife" kommentiert hast. Dein Programm l?uft so lange in der "while (GetMessage(&message,NULL,0,0))"-Schleife, bis es die Nachricht WM_QUIT bekommt (also beendet werden soll). Der Rest deiner "while (!done)"-Schleife ist also v?llig nutzlos.

    Deine "Hauptschleife" darf also eigentlich nur so aussehen:
    while(GetMessage(&message,NULL,0,0))
    {
    &nbsp;&nbsp;TranslateMessage(&message);
    &nbsp;&nbsp;DispatchMessage(&message);
    }

    und gleich danach das Ende des Programmes mit
    return message.wParam; // Ende von WinMain

    Eine eigene Schleife musst du woanders einbauen. Du k?nntest das in die WindowProc einbauen, was aber fast immer eine schlechte Idee ist, da dein Fenster bei l?ngeren Operationen dann "einfriert". Du musst f?r deine eigene Schleife einen neuen Thread starten.


    ?brigens sieht deine WindowProc schlimm aus ;-)
    Hier mal eine saubere Version (einfacher lesbar, l?st aber dein Problem nicht):
    LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
    {
    &nbsp;&nbsp;&nbsp;switch(message)
    &nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;case WM_DESTROY:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done = TRUE;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostQuitMessage(0);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(0);

    &nbsp;&nbsp;&nbsp;case WM_KEYDOWN:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch (wparam)
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case VK_ESCAPE:
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PostMessage(hwnd, WM_CLOSE, 0, 0);
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 0;
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
    &nbsp;&nbsp;&nbsp;} //switch zu Ende

    &nbsp;&nbsp;&nbsp;return (DefWindowProc(hwnd, message, wparam, lparam));
    }



    Beitrag ge?ndert am 25.11.2005 12:31 von 0-checka

    Beitrag ge?ndert am 25.11.2005 12:32 von 0-checka
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!