Prob bei CreateWindowEx



  • Hmm DevC++ zeigt mir bei folgenden Code einen Fehler an:

    #include <windows.h>
    
    // CallBack Funktion zum Verwalten von Nachrichten 
    LRESULT CALLBACK WinProc(HWND   hWnd,
                             UINT   msg,
                             WPARAM wParam,
                             LPARAM lParam);
    
    // Main Funktion
    int WINAPI WinMain(HINSTANCE hInstance,
                       HINSTANCE hPrevInstance,
                       LPSTR     lpCmdLine,
                       int       nCmdShow)
    {
        WNDCLASSEX wndClass;
        HWND hWnd;
        MSG  msg;
    
        // WindowClassExtended Struktur
        wndClass.cbSize        = sizeof(WNDCLASSEX);
        wndClass.style         = CS_DBLCLKS |
                                 CS_OWNDC   |
                                 CS_HREDRAW |
                                 CS_VREDRAW;
        wndClass.lpfnWndProc   = WinProc;
        wndClass.cbClsExtra    = 0;
        wndClass.cbWndExtra    = 0;
        wndClass.hInstance     = hInstance;
        wndClass.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wndClass.hCursor       = LoadCursor(NULL, IDC_HAND);
        wndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
        wndClass.lpszMenuName  = NULL;
        wndClass.lpszClassName = "Windowklasse";
        wndClass.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
        // Klasse registrieren
        if (!RegisterClassEx(&wndClass))
        {
            MessageBox(0, "Klasse konnte nicht registriert werden",
                       "Fehler", MB_OK);
            return 0;
        }    
    
        // Fenster erstellen
        if (!(hWnd = CreateWindowEx(NULL,
                                    "Windowklasse",
                                    "Das erste Windows Fenster",
                                    WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                                    10,  10,
                                    400, 300,
                                    NULL,
                                    NULL,
                                    hInstance,
                                    NULL))) // <-- hier ist der Fehler
        {
            MessageBox(0, "Fenster konnte nicht erstellt werden",
                       "Fehler", MB_OK);
            return(0);
        }       
    
        // Hauptschleife
        while(GetMessage(&msg, NULL, 0, 0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        // Fertig
        return 0;
    }
    
    // CallBack Funktion zum auswerten der Nachrichten
    LRESULT CALLBACK WinProc(HWND   hWnd,
                             UINT   msg,
                             WPARAM wParam,
                             LPARAM lParam)
    {
        switch(msg)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
                break;
        }
    
        return DefWindowProc(hWnd, msg, wParam, lParam);
    }
    

    Ich verstehe einfach nicht, warum er Mucken macht bei LPVOID NULL einzusetzen. Das Template von DevC++ funktioniert ja auch mit NULL und lässt sich kompilieren.
    mfg olli



  • Was und wo genau meckert er denn?!



  • Vertex: Falsch. Er meckert wegen dem ersten Parameter. (Ex-Style)



  • Da wo "// <-- hier ist der Fehler" steht 🙂

    C:\Programme\DevCpp\Projects\WinTest\main.cpp In function `int WinMain(HINSTANCE__, HINSTANCE__, CHAR*, int)':

    57 C:\Programme\DevCpp\Projects\WinTest\main.cpp [Warning] passing NULL used for non-pointer argument passing 1 of ` HWND__* CreateWindowExA(long unsigned int, const CHAR*, const CHAR*, long

    57 C:\Programme\DevCpp\Projects\WinTest\main.cpp [Warning] argument to non-pointer type `long unsigned int' from NULL

    möge verstehen wer will
    mfg olli

    Edit: 00000: danke! Aber ist auch hier das selbe Problem 🙂



  • Vertex: Wie das selbe Problem? Der Ex-Style ist kein Zeiger. Also sollte man dort 0 verwenden anstatt NULL. Kommt zwar aufs gleiche raus unter C++, aber das ist sauberer und die Warnung ist weg.



  • mach ne 0 hin und gut ist.
    schau dir mal die windef.h an, wenn du ein c++ projekt müsste NULL == 0 und ein c projekt NULL == ((void*)0)

    [edit]
    mal wieder zu langsam



  • Ahh danke, ja in VisualC++ scheint da smit NULL zu gehen, aber hast recht 0 ist einleuchtend 🙂


Anmelden zum Antworten