|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Skabus Mini JLI'ler
Anmeldedatum: 14.07.2006 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 14.07.2006, 15:04 Titel: Problem mit der erstellung eines einfachen Windowsfensters |
|
|
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 |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 14.07.2006, 16:22 Titel: |
|
|
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
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 |
|
|
Skabus Mini JLI'ler
Anmeldedatum: 14.07.2006 Beiträge: 3
Medaillen: Keine
|
Verfasst am: 14.07.2006, 16:44 Titel: |
|
|
Oh stimmt,ich danke danke vielmals,das rettet mir den Tag^^
MfG Ska |
|
Nach oben |
|
|
|
|
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
|