JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=281891eac9bcaa940e529eb6e562eaf4Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Problem mit der erstellung eines einfachen Windowsfensters

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Skabus
Mini JLI'ler



Anmeldedatum: 14.07.2006
Beiträge: 3

Medaillen: Keine

BeitragVerfasst am: 14.07.2006, 15:04    Titel: Problem mit der erstellung eines einfachen Windowsfensters Antworten mit Zitat

Ich besitze die Ausgabe "Jetzt lerne ich: DirectX 9 und Visual C++"
und ich bin da auf grund meiner verlorengegangen Buch-CD auf folgendes Problem gestoßen(orginal aus dem Easy-Codingforum):

Ich arbeite mich gerade in die Abgründe
von Windows ein und würde mich sehr freuen
wenn mir jemand sagen kan was ich beim
erstellen eines einfachen Windows Fenster falsch
mache.Als Hinweis: Ich nutze die AUtorenversion
von C++(V6.0) und das DirectX 9 SDK.Hier nun
mein Ansatzcode.Witzig an der Sache ist,das die
Syntax 100% stimmt ich aber scheinbar einen
logischen Fehler mache:

CPP:
#include <iostream.h>
#include <string.h>
#include <stdio.h>
#include <windows.h>

HWND CreateMainWindow(HINSTANCE hInstance);

LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);


HWND hWnd = 0;                                  //globale Variable Fenster-Handle


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    //Fenster erzeugen und Handle speichern
    hWnd = CreateMainWindow(hInstance);

  if(hWnd == 0)
 {
    MessageBox(0,"Das Fenster konnte nicht erzeugt werden","Fehler",MB_OK |
               MB_ICONEXCLAMATION);
       return 0;
 }

     //Strucktur, in der Informationen zur Nachricht gespeichert werden
     MSG msg;

     //Die Schleife läuft bis  die Nachricht WM_QUIT empfangen wird
     while(GetMessage(&msg,NULL,0,0))
     {
         //Nachricht an die Calbackfunktion senden
         TranslateMessage(&msg);
         DispatchMessage(&msg);

     }

    //Rückgabewert an Windows
    return 0;
}


LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
   //testet um welche Nachricht es sich handelt
    switch(msg)
    {
        //wenn das Fenster geschlossen wird, wird
        //WM_QUIT gesendet, umj das Programm zu beenden
       case WM_DESTROY:
                 PostQuitMessage(0)
                              return 0;
               break;
    }

  return (DefWindowProc(hWnd,msg,wParam,lParam));

}


HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass = {
       sizeof(WNDCLASSEX),          //Angabe der Größe
       CS_DBLCLKS | CS_OWNDC |         //Angabe der verwendeten Stile zum     
       CS_HREDRAW | CS_VREDRAW,      //Darstellen des Fensters
       MessageHandler,                              //Callback-Funktion
       0,                                                 //NULL
       0,                                                 //NULL
       hInstance,                                   
       LoadIcon(NULL,IDI_WINLOGO),   
       LoadCursor(NULL,IDC_ARROW),
       (HBRUSH)GetStockObject(WHITE_BRUSH),
       NULL,
       "Windows Class"
       LoadIcon(NULL, IDI_WINLOGO)

      };

  return CreateWindowEx(NULL,"WindowClass","Ein einfaches Fenster",
                                     WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                     0,0,400,300,NULL,NULL,hInstance,NULL);   
 
}



Beim komplilieren und erstellen gibt es kein problem.Aber wenn cih es starte bekomme ich die von mir erstelle Fehlermeldung "Fenster konnte nicht erzeugt werden" dies geht ja aus der abfrage von "hWnd == 0" hervor.Ich finde aber keinen ersichtlichen Grund warum den '0' und nicht der Wert des erzeugten Fenster zurückgegeben wird....

Also wenn jemand sich das mal ansehen könnte,und mir sagen könnte was ich falsch mache wäre ich demjenigen sehr dankbar^^

Danke im vorraus

MfG Ska
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 14.07.2006, 16:22    Titel: Antworten mit Zitat

CPP:
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <windows.h>

HWND CreateMainWindow(HINSTANCE hInstance);

LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);


HWND hWnd = 0;                                  //globale Variable Fenster-Handle


int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
    //Fenster erzeugen und Handle speichern
    hWnd = CreateMainWindow(hInstance);

  if(hWnd == 0)
 {
    MessageBox(0,"Das Fenster konnte nicht erzeugt werden","Fehler",MB_OK |
               MB_ICONEXCLAMATION);
       return 0;
 }

     //Strucktur, in der Informationen zur Nachricht gespeichert werden
     MSG msg;

     //Die Schleife läuft bis  die Nachricht WM_QUIT empfangen wird
     while(GetMessage(&msg,NULL,0,0))
     {
         //Nachricht an die Calbackfunktion senden
         TranslateMessage(&msg);
         DispatchMessage(&msg);

     }

    //Rückgabewert an Windows
    return 0;
}


LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
   //testet um welche Nachricht es sich handelt
    switch(msg)
    {
        //wenn das Fenster geschlossen wird, wird
        //WM_QUIT gesendet, umj das Programm zu beenden
       case WM_DESTROY:
                 PostQuitMessage(0);
                              return 0;
               break;
    }

  return (DefWindowProc(hWnd,msg,wParam,lParam));

}


HWND CreateMainWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wndClass = {
       sizeof(WNDCLASSEX),          //Angabe der Größe
       CS_DBLCLKS | CS_OWNDC |         //Angabe der verwendeten Stile zum     
       CS_HREDRAW | CS_VREDRAW,      //Darstellen des Fensters
       MessageHandler,                              //Callback-Funktion
       0,                                                 //NULL
       0,                                                 //NULL
       hInstance,                                   
       LoadIcon(NULL,IDI_WINLOGO),   
       LoadCursor(NULL,IDC_ARROW),
       (HBRUSH)GetStockObject(WHITE_BRUSH),
       NULL,
       "Windows Class",
       LoadIcon(NULL, IDI_WINLOGO)

      };
   
  RegisterClassEx(&wndClass);

  return CreateWindowEx(NULL,"Windows Class","Ein einfaches Fenster",
                                     WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                     0,0,400,300,NULL,NULL,hInstance,NULL);   
 
}


So sollt es funktionieren Wink
PS:. Hast die WindowsClass nicht Registriert (RegiserClassEx) und den flaschen klassen namen in der CreateWindowEx funktion verwendet
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Skabus
Mini JLI'ler



Anmeldedatum: 14.07.2006
Beiträge: 3

Medaillen: Keine

BeitragVerfasst am: 14.07.2006, 16:44    Titel: Antworten mit Zitat

Oh stimmt,ich danke danke vielmals,das rettet mir den Tag^^

MfG Ska
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum