Welche GUI?





  • Also...das is mein Fenster:

    #include <windows.h>
    
    const char g_szClassName[] = "myWindowClass";
    
    // Step 4: the Window Procedure
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_CLOSE:
                DestroyWindow(hwnd);
            break;
            case WM_DESTROY:
                PostQuitMessage(0);
            break;
            default:
                return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow)
    {
        WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;
    
        //Step 1: Registering the Window Class
        wc.cbSize        = sizeof(WNDCLASSEX);
        wc.style         = 0;
        wc.lpfnWndProc   = WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = g_szClassName;
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
        HWND hwndButton = CreateWindow( 
        L"BUTTON",   // Predefined class; Unicode assumed. 
        L"OK",       // Button text. 
        WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles. 
        10,         // x position. 
        10,         // y position. 
        100,        // Button width.
        100,        // Button height.
        hDlg,       // Parent window.
        NULL,       // No menu.
        (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE), 
        NULL);      // Pointer not needed.
    
        if(!RegisterClassEx(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        // Step 2: Creating the Window
        hwnd = CreateWindowEx(
            WS_EX_CLIENTEDGE,
            g_szClassName,
            "Title",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 500, 500,
            NULL, NULL, hInstance, NULL);
    
        if(hwnd == NULL)
        {
            MessageBox(NULL, "Window Creation Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        // Step 3: The Message Loop
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        HWND hwndButton = CreateWindow( 
        L"BUTTON",   // Predefined class; Unicode assumed. 
        L"OK",       // Button text. 
        WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles. 
        10,         // x position. 
        10,         // y position. 
        100,        // Button width.
        100,        // Button height.
        hDlg,       // Parent window.
        NULL,       // No menu.
        (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE), 
        NULL);      // Pointer not needed.
    
        return Msg.wParam;
    }
    

    an welcher Stelel muss dann der Code für den button z.B. rein?
    Ich hab an verschiedenen Stellen versucht, aber immer kommt der fehler in der Zeile für "HWND hwndButton = CreateWindow( " : hDlg was not declared

    Pls help 🙄



  • Du sollst nicht einfach nur kopieren, sondern den Code verstehen..

    Im übrigen ist ein Button nichts anderes, als ein Fenster (mit ein paar anderen Parametern) und da du in deinem Code ja bereits ein Fenster erzeugst (Zeile 64), sollte die Stelle klar sein..


  • Administrator

    Zudem, wenn ich noch anmerken darf:
    Du bist hier im falschen Forum mit WinAPI Fragen. Du würdest viel mehr Hilfe bekommen, wenn du einen neuen Thread pro Problem im richtigen Forum erstellen würdest.

    Die haben dann auch sicher gute Links und Tipps für Tutorials und Bücher.

    Grüssli



  • haha ich glaube das ist der code von Dev C++ Wizard (laugh).
    sieh dir tuts an, lese ein buch, oder fang mit was einfacherem an (z.b. console)



  • "Kapieren, nicht kopieren" is mein Spruch :p
    @Tim06TR:
    Das ist der Code aus einem Tutorial...und Console hab ich schon drauf! 😉
    Also muss ich ja dann den Button erzeugen, nachdem das Fenster erzeugt wurde, oder`?
    Also:

    #include <windows.h>
    
    const char g_szClassName[] = "myWindowClass";
    
    // Step 4: the Window Procedure
    LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
        switch(msg)
        {
            case WM_CLOSE:
                DestroyWindow(hwnd);
            break;
            case WM_DESTROY:
                PostQuitMessage(0);
            break;
            default:
                return DefWindowProc(hwnd, msg, wParam, lParam);
        }
        return 0;
    }
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
        LPSTR lpCmdLine, int nCmdShow)
    {
        WNDCLASSEX wc;
        HWND hwnd;
        MSG Msg;
    
        //Step 1: Registering the Window Class
        wc.cbSize        = sizeof(WNDCLASSEX);
        wc.style         = 0;
        wc.lpfnWndProc   = WndProc;
        wc.cbClsExtra    = 0;
        wc.cbWndExtra    = 0;
        wc.hInstance     = hInstance;
        wc.hIcon         = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor       = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
        wc.lpszMenuName  = NULL;
        wc.lpszClassName = g_szClassName;
        wc.hIconSm       = LoadIcon(NULL, IDI_APPLICATION);
    
        if(!RegisterClassEx(&wc))
        {
            MessageBox(NULL, "Window Registration Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        // Step 2: Creating the Window
        hwnd = CreateWindowEx(
            WS_EX_CLIENTEDGE,
            g_szClassName,
            "The title of my window",
            WS_OVERLAPPEDWINDOW,
            CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
            NULL, NULL, hInstance, NULL);
    
        if(hwnd == NULL)
        {
            MessageBox(NULL, "Window Creation Failed!", "Error!",
                MB_ICONEXCLAMATION | MB_OK);
            return 0;
        }
    
        ShowWindow(hwnd, nCmdShow);
        UpdateWindow(hwnd);
    
        HWND hwndButton = CreateWindow(
        L"BUTTON",   // Predefined class; Unicode assumed.
        L"OK",       // Button text.
        WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,  // Styles.
        10,         // x position.
        10,         // y position.
        100,        // Button width.
        100,        // Button height.
        hDlg,       // Parent window.
        NULL,       // No menu.
        (HINSTANCE)GetWindowLong(hDlg, GWL_HINSTANCE),
        NULL);      // Pointer not needed.
    
        // Step 3: The Message Loop
        while(GetMessage(&Msg, NULL, 0, 0) > 0)
        {
            TranslateMessage(&Msg);
            DispatchMessage(&Msg);
        }
        return Msg.wParam;
    }
    

    😕
    Aber da kommt ein Fehler in Zeile 69: hDlg was not declared in this scope
    Ich raffs nicht...

    Ja hast recht falsches Forum, aber ich will nich doppelt posten...ansonsten muss halt ein Admin verschieben! Hatte das nur in C++ am Anfang gemacht, weil ich ja nicht wusste ob es WinApi oder sonst was is...



  • Finn schrieb:

    "Kapieren, nicht kopieren" is mein Spruch :p
    [...]
    Aber da kommt ein Fehler in Zeile 69: hDlg was not declared in this scope
    Ich raffs nicht...

    Ah ja...
    Du solltest zu allererst mal versuchen, zu verstehen, was du machst - und dann kannst du es auch sehr einfach erweitern...
    ich würde ja mal raten, dass du hDlg durch hwnd ersetzen musst...
    ansonsten: such dir doch bitte ein winapi tut, wo das erklärt wird - vom kopieren und sagen lassen, was du ändern musst, wirst du auf jeden fall weniger kapieren, als sonst - außerdem ists doch auch scheiße, wenn man jedes mal nur paar zeilen tippen kann und dann nen fehler bekommt und dann erst ma paar stunden warten muss, bis sich jmd erbarmt, dir zu sagen, was du falsch gemacht hast...

    bb



  • Hast du ein gutes Tutorial für mich? Ich hab nur eins auf Englisch, bei dem zwar im ersten Kapitel das Fenster an sich gut erklärt wird, aber weder gezeigt wird, wie man Knöpfle bastelt, noch wie man einfach ins Fenster was reinschreibt...



  • das hier sieht doch ganz gut aus: www.win-api.de

    und das hier sah beim überfliegen auch gar nich schlecht aus:
    http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api2.htm

    auch http://www.pronix.de/pronix-1023.html kann so falsch nicht sein

    das diese punkte nicht als allererstes im tut kommen, sollte ja wohl klar sein - es ist nun mal nicht ganz trivial - und das erzeugen alleine bringt dir ja wohl gar nichts, wenn du dann nicht weiter weist - also brauchst du auch das ganze msg-zeugs, was meist nach dem fenster erstellen behandelt wird - und erst danach kannst du sinnvoll buttons etc erzeugen - und dann kannst du auch auf nen klick o.ä. reagieren...

    bb



  • http://www.tutorials.de/forum/c-c/136154-c-win-api-gutes-tutorial-mit-quellcode.html
    Keine Ahnung ob die Tips gut sind, aber ich hab das ganz schnell gefunden (google: "deutsches WinAPI-Tutorial")



  • Danke für die Tut Links! Sieht echt net schlecht aus, vorallem sind die jetzt auf Deutsch 😉
    Also damit werde ich mich jetzt befassen und wenn ich nochmal Fragen hab, mach ich einen neuen Thread im WinApi forum 🙂

    Danke an alle


Anmelden zum Antworten