Bin neu in WinAPI und habe probleme mit TextOut()



  • Ich bin neu in WinAPI Programmierung. Ich möchte versuchen, etwas zu zeichnen, aber es funktioniert nicht.
    Dies ist mein Code:

    #define STRICT
    #include <windows.h>
    #include <string.h>
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
      HWND WindowMain;
      MSG msg;
      WNDCLASS wc;
      wc.style = CS_HREDRAW|CS_VREDRAW;
      wc.lpfnWndProc = WndProc;
      wc.cbClsExtra = 0;
      wc.cbWndExtra = 0;
      wc.hInstance = hInstance;
      wc.hCursor = LoadCursor(NULL, IDC_ARROW);
      wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
      wc.hbrBackground = (HBRUSH) COLOR_BACKGROUND;
      wc.lpszClassName = "Meine Anwendung";
      wc.lpszMenuName = NULL;
      RegisterClass(&wc);
    
      WindowMain = CreateWindow("Meine Anwendung",
                                "Anwendung",
                                WS_OVERLAPPEDWINDOW,
                                128,
                                128,
                                640,
                                480,
                                NULL,
                                NULL,
                                hInstance,
                                NULL);
      ShowWindow(WindowMain, iCmdShow);
      UpdateWindow(WindowMain);
      while(GetMessage(&msg, NULL, 0, 0))
      {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
      return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
      static RECT rect;
      switch(message)
      {
        case WM_DESTROY:
        {
          PostQuitMessage(0);
          return 0;
        }
        case WM_KEYDOWN:
        {
          switch(wParam)
          {
            case VK_ESCAPE:
              PostQuitMessage(0);
              return 0;
          }
        }
        case WM_PAINT:
        {
          PAINTSTRUCT ps;
          HDC hDC;
          hDC = BeginPaint(hWnd, &ps);
          TextOut(hDC, 50, 50, "Hallo, Welt!", sizeof("Hallo, Welt!")-1);
          // lasse ich einfach diese Funktion weg, funktioniert es wieder
          EndPaint(hWnd, &ps);
          return 0;
        }
      }
      return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Wenn ich diesen Code mit Dev-C++ kompiliere, erscheint nicht, und unten (Fehler?) steht folgendes:

    [Linker error] undefined reference toTextOutA@20'

    Id returned 1 exit status`

    Kann mir da jemand weiterhelfen?



  • Library: Use Gdi32.lib.



  • hfghfg schrieb:

    Library: Use Gdi32.lib.

    How do I do that?



  • IDE?



  • gosha16 schrieb:

    IDE?

    Please do not make it so complicated to me. I'm new in programming WinAPI.
    What do you mean with that question?



  • asmodeus schrieb:

    Please do not make it so complicated to me. I'm new in programming WinAPI.
    What do you mean with that question?

    Hoppla: Mache es mir doch nicht sdo kompliziert. Ich bin neu in der Programmierung von WinAPI.
    Was meinst du mit "IDE?"? Ich kenne kein IDE.



  • MS Visual C++? Dev-Cpp? Code Blocks?



  • gosha16 schrieb:

    MS Visual C++? Dev-Cpp? Code Blocks?

    asmodeus schrieb:

    Wenn ich diesen Code mit Dev-C++ kompiliere, ...

    Ich benutze Dev-C++, wenn du das wissen willst.



  • überlesen :p

    Geh in die Projektoptionen -> Parameter und bei Linker "Objekt hinzufügen"

    im Dev Cpp Verzeichnis im Ordner Lib -> "libgdi32.a" hinzufügen



  • gosha16 schrieb:

    überlesen :p

    Geh in die Projektoptionen -> Parameter und bei Linker "Objekt hinzufügen"

    im Dev Cpp Verzeichnis im Ordner Lib -> "libgdi32.a" hinzufügen

    Okay, das Programm wird jetzt ausgeführt.
    Aber:
    1. Woher weiß ich eigentlich, dass ich dies hinzufügen muss?
    2. Es wird zwar ausgeführt, zeichnen tut es aber nichts.



  • Neues Win32 Projekt, den Code reinpasten.
    Dann gehst du links, direkt neben deinem Code, in diesem Projekt Browser (Wenn du da nichts ist, -> Ansicht und gucken ob beim ersten das Häckchen gesetzt ist) auf den Reiter "Projekt". Da sollte(muss) dein Projekt sein.
    Dann machst du rechtsklick darauf und dann "Projekt Optionen" auswählen. Dann den Reiter "Parameter" auswählen. Dann "libgdi32.a" hinzufügen. Eventuell musst du dich etwas navigieren. Die Datei befindet sich (bei mir) im Ordner "lib" im Dev-Cpp Verzeichnis.



  • Sirrr schrieb:

    Neues Win32 Projekt, den Code reinpasten.
    Dann gehst du links, direkt neben deinem Code, in diesem Projekt Browser (Wenn du da nichts ist, -> Ansicht und gucken ob beim ersten das Häckchen gesetzt ist) auf den Reiter "Projekt". Da sollte(muss) dein Projekt sein.
    Dann machst du rechtsklick darauf und dann "Projekt Optionen" auswählen. Dann den Reiter "Parameter" auswählen. Dann "libgdi32.a" hinzufügen. Eventuell musst du dich etwas navigieren. Die Datei befindet sich (bei mir) im Ordner "lib" im Dev-Cpp Verzeichnis.

    Hoppla, ich hatte inzwischen "WM_DRAW..." entfernt, funktioniert doch. Danke an alle.


Anmelden zum Antworten