Rad tool für WinApi



  • ich will die winapi aber nicht in classen packen oder sonst was!
    Hier mal ein Beispiel

    /////////////////////////////0
    //Grundzeug für jede WinAPi Applicatoin
    #define STRICT
    #include <windows.h>
    LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
                       PSTR szCmdLine, int iCmdShow)
    {
    
       //////////////////////////////////////////////1
       // WIndow registrieren und definieren!
       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_HAND);
       wc.hIcon         =  LoadIcon(NULL,IDI_QUESTION);
       wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
       wc.lpszClassName =  "Ein eigenes Fenster";
       wc.lpszMenuName  =  NULL;
       RegisterClass(&wc);
       ///////////////////////////////////////////2
       //Window erstellen
       HWND       hWnd;
       hWnd = CreateWindow("Ein eigenes Fenster",
                           "Titelleiste",
                           WS_OVERLAPPEDWINDOW,
                           CW_USEDEFAULT,          /* X-Position auf dem Monitor */
                           CW_USEDEFAULT,          /* Y-Position auf dem Monitor */
                           CW_USEDEFAULT,          /* Fensterbreite              */
                           CW_USEDEFAULT,          /* Fensterhoehe               */
                           NULL,
                           NULL,
                           hInstance,
                           NULL);
       ShowWindow(hWnd, iCmdShow); // anzeigen
       UpdateWindow(hWnd); // neu zeichen
       ////////////////////////////////////////////////////3
       //benutzeraktivitäten abfragen
       MSG        msg;
       while (GetMessage(&msg, NULL, 0, 0))
       {      TranslateMessage(&msg);
          DispatchMessage(&msg);
       }
    	     return msg.wParam;
    }
    
    //////////////////////////////////////////////////////4
    // was mit den von 3. erstellen nachrichten machen
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
       switch (message)
       {
          case WM_PAINT:
          {
    	     PAINTSTRUCT ps;
             HDC         hDC;
    		 const char  szText[] = "Hallo, dies ist der Text du loasen.";
    		 hDC = BeginPaint(hWnd, &ps);
             {
    		    TextOut(hDC, 0, 0, szText, sizeof(szText) - 1);
    	     }
             EndPaint(hWnd, &ps);
             return 0;
          }
          case WM_DESTROY:
          {
             PostQuitMessage(0);
             return 0;
          }
       }
       return DefWindowProc(hWnd, message, wParam, lParam);
    }
    

    Und ich möchte das dieser code erstellt wird, wenn ich mit einem editor ein fenster öffne und da etwas reinschreibe z.b.



  • dann schreib ein tool welches das macht.
    simon



  • da muss es doch schon welche geben?



  • normalerweise wird das über eine entsprechende abstraktion gelöst, nicht über code generatoren.
    simon



  • abstraktion?



  • i sense a c vs. c++ bashing incoming 🙂



  • sothis_ schrieb:

    i sense a c vs. c++ bashing incoming 🙂

    🙂 sieht danach aus...



  • wo ist eigentlich euer Problem?
    Visual Studio hat genau das was er sucht dabei!



  • ok ich habe jetzt mein Problem gelöst mit: Pelles C!
    Seltsam finde ich, dass ich alle Steuerelemente wie Checkbuttons Scrollbars usw dazu tun kann, aber die main.c quellcodedatei ändert sich nicht, obwohl ich neue sachen dazu tuhe



  • vielleicht solltest du dich erst mal mit Grundlagen der WinAPI auseinandersetzen,
    um zu lernen, was Resourcen sind, was aufwendig selbst erstellte Fenster sind etc. ...

    Was du dort in Pelles C verwendest, ist der Resourceneditor, den du mit
    fast jeder IDE für (Windows-)programmierung mitbekommst.



  • ok thx und eine Frage hätte ich noch...
    Wenn ich auf neues Projekt gehe kann man auch WinForms unter CLR auswählen.
    Damit kann man die Fenster so erstellen wie ich mir das vorgestellt habe.
    Ist es dass .NET Zeug?



  • ja 🙂



  • puh ne danke, darauf kann ich verzichten :D.
    Ich mache jetzt mal ne Zeitlang C++ und WInApi und wenn ich beides gut kann gehts ab 😃
    Würdet ihr mir zum Petzold raten? In den Tutorials ist ja anscheinend nur ein kleiner Teil beschrieben. Also z.b. ein Leeres fenster. aber wie man buttons checkboxen und listen und so macht wird nicht erklärt



  • sidobushido schrieb:

    Würdet ihr mir zum Petzold raten?

    gehört in jedes frickler-regal 🙂



  • sothis_ arbeitest du auch mit der "reinen" winapi?



  • sidobushido schrieb:

    sothis_ arbeitest du auch mit der "reinen" winapi?

    meist nur noch mit kleineren subsystemen um zum beispiel platformübergreifende funktionalität zu implementieren ohne auf größere frameworks wie qt zurückgreifen zu müssen.



  • sidobushido schrieb:

    Würdet ihr mir zum Petzold raten? In den Tutorials ist ja anscheinend nur ein kleiner Teil beschrieben. Also z.b. ein Leeres fenster. aber wie man buttons checkboxen und listen und so macht wird nicht erklärt

    Dann hast Du ein ziemlich mieses Tutorial gemacht, denn ein Tut, das beim leeren Fenster aufhört, ist nichts wert. So eines kenne ich gar nicht.

    In den WinAPI-FAQ habe ich eine ganze Liste von Tutorials zusammengestellt, die solltest Du mal gründlich durcharbeiten.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-217065.html

    Wozu willst Du einen Code-Generator? Willst Du Programme zur zusammenbasteln, oder willst Du sie auch verstehen 💡 - ist nämlich fürs Debugging und für gewissen Modifikationen äußerst wichtig. ⚠



  • würdet ihr mir raten, das ich den Code der WinApi komplett auswendig lerne, also das ich ihn schreiben kann ohne ins Tutorial zu schaun, oder sollte ich lieber die gleichbleibenden Sachen rauskopieren (natürlich trotzdem kapieren usw) und dann ändern wie z.b.

    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_HAND);
       wc.hIcon         =  LoadIcon(NULL,IDI_QUESTION);
       wc.hbrBackground =  (HBRUSH)GetStockObject(WHITE_BRUSH);
       wc.lpszClassName =  "Ein eigenes Fenster";
       wc.lpszMenuName  =  NULL;
       RegisterClass(&wc);
    


  • ich glaube ihr habt das mit dem Generator bisschen falsch verstanden.
    Ich meinte damit nur so ein Tool wie es z.b. bei den ganzen GUIs auch gibt, bei dem man Fenster "Zusammenklicken" kann. Natürlich wollte ich da erstmal lernen, ohne so ein Programm zu arbeiten aber das erleichtert und beschleunigt die Arbeit!
    Ihr wollt mir doch nicht erzählen, das ihr mit eurer GUI immer den ganzen Code eingibt und kein Rad tool benutzt?



  • Ihr wollt mir doch nicht erzählen, das ihr mit eurer GUI immer den ganzen Code eingibt und kein Rad tool benutzt?

    Doch, genau das wollen wir dir erzählen, reine WinAPIler machen das so.


Anmelden zum Antworten