Programm wird nicht gestartet



  • Hallo,

    wenn ich meine WinApi starten möchte, dann kommt immer nur eine leere Eingabeaufforderung.
    main.cpp:

    #include <windows.h>
    #include "resource.h"
    
    LPCSTR MainClassName = "";
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,
                             WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                       PSTR szCmdLine, int iCmdShow)
    {
       WNDCLASSEX wc;
       MSG wmsg;
       HWND hWnd;
    
       wc.cbSize = sizeof(WNDCLASSEX);
       wc.style = 0;
       wc.lpfnWndProc = WndProc;
       wc.cbClsExtra = 0;
       wc.cbWndExtra = 0;
       wc.hInstance = hInstance;
       wc.hIcon = LoadIcon(GetModuleHandle(NULL),
                                    MAKEINTRESOURCE(ID_ICON));
       wc.hCursor         = LoadCursor(NULL, IDC_ARROW);
       wc.hbrBackground = (HBRUSH) GetStockObject (GRAY_BRUSH);
       wc.lpszMenuName  = "MAINMENU";
       wc.lpszClassName = MainClassName;
       wc.hIconSm         = (HICON)LoadImage(GetModuleHandle(NULL),
                                            MAKEINTRESOURCE(ID_ICON),
                                            IMAGE_ICON, 16, 16, 0);
    
        hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, MainClassName,
                              "Menü Beispiel",
                              WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                              -1, -1, 1024,768,NULL,NULL,hInstance, NULL);
    
    while(GetMessage(&wmsg,NULL,0,0))
       {
          TranslateMessage(&wmsg);
          DispatchMessage(&wmsg);
       }
       return wmsg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg, WPARAM wParam, LPARAM lParam)
    {
        HDC hdc;
        PAINTSTRUCT ps;
        HWND hwndedit;
        char string[255];
    
        switch (iMsg)
        {
          case WM_CLOSE:
            DestroyWindow(hWnd);
            break;
          case WM_DESTROY:
             PostQuitMessage(0);
             return 0;
           case WM_COMMAND:
           switch(LOWORD(wParam))
           {
              case ID_FILE_EXIT:
                DestroyWindow(hWnd);
                 break;
           }
           break;
          case WM_PAINT:
           hdc = BeginPaint (hWnd, &ps);
               SetBkColor (hdc, RGB(130,130,130));
                TextOut (hdc, 20,10,"Text", 20);
            EndPaint (hWnd, &ps);
            return 0;
          case WM_CREATE:
           hwndedit = CreateWindow( "edit", "Text", WS_CHILD | WS_VISIBLE, 251, 50, 50, 50, hWnd, (HMENU)2, (HINSTANCE) GetWindowLong (hWnd, GWL_HINSTANCE), NULL);
           return 0;
          }
       return DefWindowProc(hWnd,iMsg,wParam,lParam);
    }
    

    resource.h:

    #define MAINMENU                      101
    
    #define ID_ICON                         111
    
    #define ID_FILE_EXIT                    40003
    

    menu.rc:

    //Ressourcen-Skriptedatei *.rc
    
    #include "resource.h"
    
    /////////////////////////////////////////////////////////////////
    //
    // Menü
    //
    
    MAINMENU MENU
    {
        POPUP "Datei"
        {
            MENUITEM "Ende",               ID_FILE_EXIT
        }
    }
    
    /////////////////////////////////////////////////////////////////
    //
    //Stringtabelle
    //
    STRINGTABLE
    {
    }
    

    E:\ Der Compiler spuckt mir beim Debuggen folgende Warnungen aus:

    E:\CodeBlocks\api\main.cpp:62: warning: unused variable 'hdc'
    E:\CodeBlocks\api\main.cpp:63: warning: unused variable 'ps'
    E:\CodeBlocks\api\main.cpp:64: warning: unused variable 'hwndedit'
    E:\CodeBlocks\api\main.cpp:65: warning: unused variable 'str'



  • Hallo,

    dein LPCSTR MainClassName sollte nicht leer sein,
    Fenster registrieren mit Funktion RegisterClassEx.

    mfg
    kpeter



  • Hallo,

    jetzt klappts. Aber jetzt wird kein Menü angezeigt.



  • sulpsulpc (Gast) schrieb:

    Aber jetzt wird kein Menü angezeigt.

    Das liest sich, als ob das Menü vorher da war 😃 .

    Naja, so wird das nix.

    Dein Code hat erhebliche Mängel. Insbesondere hast du keine Möglichkeit eingebaut, das Prog abzubrechen (zB. wenn hWnd = NULL ist und
    das Prog trotzdem weiterläuft). Nach deinem oberen Listing passiert das so.

    Am einfachsten erstellst du dir einen funktionierenden Grundprogrammcode ohne Schnickschnack und baust darauf auf..

    edit: Beispiel



  • kpeter schrieb:

    Insbesondere hast du keine Möglichkeit eingebaut, das Prog abzubrechen (zB. wenn hWnd = NULL ist und
    das Prog trotzdem weiterläuft).

    Hallo,

    ich habe sowas nicht nötig, da ich KEIN Microschrott-Programmierer bin.



  • sulpsulpc schrieb:

    da ich KEIN Microschrott-Programmierer bin.

    das glaub ich dir sogar 🤡



  • sulpsulpc schrieb:

    ich habe sowas nicht nötig, da ich KEIN Microschrott-Programmierer bin.

    A....loch


Anmelden zum Antworten