Ein Problem mit einen einfachen Windowsfenster

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ein Problem mit einen einfachen Windowsfenster

    Hallo,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:

    Quellcode

    1. #include <iostream.h>
    2. #include <string.h>
    3. #include <stdio.h>
    4. #include <windows.h>
    5. HWND CreateMainWindow(HINSTANCE hInstance);
    6. LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam);
    7. HWND hWnd = 0; //globale Variable Fenster-Handle
    8. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
    9. {
    10. //Fenster erzeugen und Handle speichern
    11. hWnd = CreateMainWindow(hInstance);
    12. if(hWnd == 0)
    13. {
    14. MessageBox(0,"Das Fenster konnte nicht erzeugt werden","Fehler",MB_OK |
    15. MB_ICONEXCLAMATION);
    16. return 0;
    17. }
    18. //Strucktur, in der Informationen zur Nachricht gespeichert werden
    19. MSG msg;
    20. //Die Schleife läuft bis die Nachricht WM_QUIT empfangen wird
    21. while(GetMessage(&msg,NULL,0,0))
    22. {
    23. //Nachricht an die Calbackfunktion senden
    24. TranslateMessage(&msg);
    25. DispatchMessage(&msg);
    26. }
    27. //Rückgabewert an Windows
    28. return 0;
    29. }
    30. LRESULT CALLBACK MessageHandler(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
    31. {
    32. //testet um welche Nachricht es sich handelt
    33. switch(msg)
    34. {
    35. //wenn das Fenster geschlossen wird, wird
    36. //WM_QUIT gesendet, umj das Programm zu beenden
    37. case WM_DESTROY:
    38. PostQuitMessage(0)
    39. return 0;
    40. break;
    41. }
    42. return (DefWindowProc(hWnd,msg,wParam,lParam));
    43. }
    44. HWND CreateMainWindow(HINSTANCE hInstance)
    45. {
    46. WNDCLASSEX wndClass = {
    47. sizeof(WNDCLASSEX), //Angabe der Größe
    48. CS_DBLCLKS | CS_OWNDC | //Angabe der verwendeten Stile zum
    49. CS_HREDRAW | CS_VREDRAW, //Darstellen des Fensters
    50. MessageHandler, //Callback-Funktion
    51. 0, //NULL
    52. 0, //NULL
    53. hInstance,
    54. LoadIcon(NULL,IDI_WINLOGO),
    55. LoadCursor(NULL,IDC_ARROW),
    56. (HBRUSH)GetStockObject(WHITE_BRUSH),
    57. NULL,
    58. "Windows Class"
    59. LoadIcon(NULL, IDI_WINLOGO)
    60. };
    61. return CreateWindowEx(NULL,"WindowClass","Ein einfaches Fenster",
    62. WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    63. 0,0,400,300,NULL,NULL,hInstance,NULL);
    64. }
    Alles anzeigen


    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

    EDIT: Ich hoffe man kann den Code lesen,die Forensoftware verwurschtelt das ziemlich oO
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • hm, grad gestern hab ich mein Buch zur DirectX9 Programmierung bei ebay verkauft
    (schließlich kommt die 10er bald und dann ists nichts mehr wert)
    aber hab nie reingeschaut, da ich zu etwa der zeit komplett auf linux umgestiegen bin und da ist OpenGL die bessere wahl

    könntest du dennoch die Lösung etwas erläutern oder zumindest nen Direktlink zum dortigen Posting angeben?
  • "d0nUt" schrieb:

    hm, grad gestern hab ich mein Buch zur DirectX9 Programmierung bei ebay verkauft
    (schließlich kommt die 10er bald und dann ists nichts mehr wert)
    aber hab nie reingeschaut, da ich zu etwa der zeit komplett auf linux umgestiegen bin und da ist OpenGL die bessere wahl

    könntest du dennoch die Lösung etwas erläutern oder zumindest nen Direktlink zum dortigen Posting angeben?


    Klar.es war ein einfacher aber recht fataler Fehler:

    Quellcode

    1. HWND CreateMainWindow(HINSTANCE hInstance)
    2. {
    3. WNDCLASSEX wndClass = {
    4. sizeof(WNDCLASSEX), //Angabe der Größe
    5. CS_DBLCLKS | CS_OWNDC | //Angabe der verwendeten Stile zum
    6. CS_HREDRAW | CS_VREDRAW, //Darstellen des Fensters
    7. MessageHandler, //Callback-Funktion
    8. 0, //NULL
    9. 0, //NULL
    10. hInstance,
    11. LoadIcon(NULL,IDI_WINLOGO),
    12. LoadCursor(NULL,IDC_ARROW),
    13. (HBRUSH)GetStockObject(WHITE_BRUSH),
    14. NULL,
    15. "Windows Class"
    16. LoadIcon(NULL, IDI_WINLOGO)
    17. };
    18. return CreateWindowEx(NULL,"WindowClass","Ein einfaches Fenster",
    19. WS_OVERLAPPEDWINDOW | WS_VISIBLE,
    20. 0,0,400,300,NULL,NULL,hInstance,NULL);
    21. }
    Alles anzeigen


    Um ein Fenster mit dieser Methode zu erstellen muss man den Klassennamen der
    in der WNDCLASSEX-Klasse definierten Namen bei "CreateWindowEX" angeben.

    Ich hab bei der WNDCLASSEX "Windows Class" und beim CreateWindow dann fläschlicherweise WindowClass angegeben.

    Das führt dazu das es keinen Verweis auf die WNDCLASSEX gibt udn somit werdenkeine Wert definiert und NULL(oder 0) zurückgegebn.In der Endkonsequenz
    wird die fehlermeldung ausgegeben.

    Wiedermal zeigt sich,das kleien Tippfehler große Probleme hervorrufen können!

    Hier der Link zum Strang im Autorenforum:
    http://www.jliforum.de/board/viewtopic.php?t=4618

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]