WinApi Fenster fragen



  • Hi
    Ich benutze den Dev C++ IDE (Kompiler) und möchte ein Fenster erstellen. Ich habe den Quelltext von diesen Tutoriel: http://www.henkessoft.de/C++/WinAPI/WinAPI Kapitel 1 bis 6/api2.htm
    Hier der Quelltext:

    #include <windows.h> 
    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);  
    //Deklaration der Windows-Nachrichten-Prozedur 
    
    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow) 
    { 
    char szName[] = "Fensterklasse"; 
    WNDCLASS wc; 
    
    wc.style         = CS_HREDRAW | CS_VREDRAW;   // CS = "class style" 
    wc.lpfnWndProc   = WndProc; 
    wc.cbClsExtra    = 0; 
    wc.cbWndExtra    = 0; 
    wc.hInstance     = hI; 
    wc.hIcon         = LoadIcon (NULL, IDI_WINLOGO); 
    wc.hCursor       = LoadCursor (NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH); 
    wc.lpszMenuName  = NULL; 
    wc.lpszClassName = szName; 
    
    RegisterClass (&wc); 
    
    HWND hwnd = CreateWindow (szName, "", WS_SYSMENU | WS_THICKFRAME,  
                              0, 0, 200, 100, NULL, NULL, hI, NULL); 
    
    ShowWindow   (hwnd, iCmdShow); 
    UpdateWindow (hwnd); 
    
    // Nachrichten-Schleife 
    MSG msg; 
        while (GetMessage (&msg, NULL, 0, 0)) 
        { 
            TranslateMessage (&msg); 
            DispatchMessage (&msg); 
        } 
    return msg.wParam; 
    } 
    
    // Windows-Nachrichten-Prozedur 
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
    { 
    HDC hdc; 
    PAINTSTRUCT ps; 
    
    switch (message) 
    { 
    case WM_PAINT: 
        hdc = BeginPaint (hwnd, &ps); 
            TextOut (hdc, 20, 20, "Ich bin ein Fenster.", 20); 
        EndPaint (hwnd, &ps); 
        return 0; 
    
    case WM_DESTROY: 
        PostQuitMessage (0); 
        return 0; 
    } 
    
    return DefWindowProc (hwnd, message, wParam, lParam); 
    }
    

    Dabei erschein folgender Fehler: [Linker error] undefined reference to GetStockObject@4' [Linker error] undefined reference toTextOutA@20'
    ld returned 1 exit status

    Hat jemand ne Idee was der Fehler ist oder kennt jemand ein besseres Tutoriel?



  • ist irgendeine library nicht drin, deshalb findet der linker die funktionen nicht.
    der aufruf sollte so aussehen gcc -o name -mwindows datei.c



  • Also was genau muss ich jetzt ändern?



  • du musst in deinem compiler aufruf -mwindows hinzufügen



  • oh sorry hast ja ne ide, da musst du bei einem neuen projekt win32 fensteranwendung oder so wählen



  • Okay Danke klappt jetzt



  • Was genau macht eigentlich bei diesem Code

    ShowWindow   (hwnd, iCmdShow);
    

    der Befehl iCmdShow.



  • den Parameter ist von der WinMain und sagt aus, wie dein Fenster dargestellt wird.

    int WINAPI WinMain (HINSTANCE hI, HINSTANCE hPrI, PSTR szCmdLine, int iCmdShow)
    


  • Und wie stellt iCmdShow, dass Fenster da, weil es gibt ja auch noch
    SW_NORMAL. Also was ist der Unterschied zwischen SW_NORMAL und iCmdShow?



  • iCmdShow ist Grundsätzlich SW_SHOWNORMAL.
    Bei Verknüpfungen von Programmen kann man jedoch unter Eigenschaften das Programm minimiert und maximiert starten. Dann hat iCmdShow einen anderen Wert.



  • Okay Thx


Log in to reply