Eigene Vorlage



  • Hey Leute.
    Ich hab mir ne eigene Vorlage gemacht, weil ich die beim Wizard bekackt find...
    Ich poste mal den Code hier, falls etwas falsch ist oder man besser machen könnte korriegiert mich bittö^^

    #include <windows.h>
    
    LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
        static TCHAR szAppName[] = TEXT("-->Hier AppName<--"); // Hier eigenen AppNamen eintragen!
    
        HWND     hwnd;
        MSG      msg;
        WNDCLASS wndclass;
    
        wndclass.style         = CS_HREDRAW | CS_VREDRAW;
        wndclass.lpfnWndProc   = WndProc;
        wndclass.cbClsExtra    = 0;
        wndclass.cbWndExtra    = 0;
        wndclass.hInstance     = hInstance;
        wndclass.hIcon         = LoadIcon(NULL,IDI_APPLICATION);
        wndclass.hCursor       = LoadCursor(NULL,IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);
        wndclass.lpszMenuName  = NULL;
        wndclass.lpszClassName = szAppName;
    
        if(!RegisterClass(&wndclass))
        {
            MessageBox(NULL,TEXT("Programm arbeitet mit Unicode und setzt Windows NT voraus!"),szAppName,MB_ICONERROR);
            return 0;
        }
    
        hwnd = CreateWindow(szAppName,              /* Name der Fensterklasse */
                            szAppName,              /* Fenstertitel */
                            WS_OVERLAPPEDWINDOW,    /* Fensterstil */
                            CW_USEDEFAULT,          /* X-Position des Fensters */
                            CW_USEDEFAULT,          /* Y-Position des Fensters */
                            CW_USEDEFAULT,          /* Fensterbreite */
                            CW_USEDEFAULT,          /* Fensterhöhe */
                            NULL,                   /* Übergeordnetes Fenster */
                            NULL,                   /* Menü */
                            hInstance,              /* Programm-Kopiezähler (Programm-ID) */
                            NULL);                  /* Zusätzlicher Parameter (MDI) */
    
        ShowWindow(hwnd,iCmdShow);
        UpdateWindow(hwnd);
    
        while(GetMessage(&msg,NULL,0,0))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    
        return msg.wParam;
    }
    
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_CREATE:
                return 0;
            case WM_PAINT:
                return 0;
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;
            default:
                return DefWindowProc(hwnd,message,wParam,lParam);
        }
    
        return 0;
    }
    

    Mfg Wikinger75!


  • Mod

    static TCHAR szAppName[] = TEXT("-->Hier AppName<--"); // Hier eigenen AppNamen eintragen!
    

    1. Warum static?
    2. WinMain?, Wenn schon TCHAR dann tWinMain!
    3. WM_PAINT ohne NeginPaint/EndPaint heißt endlose WM_APINT bearbeitung und hohe Prozessorlast

    Da finde ich den Code den der Wizard erzeugt aber x-mal besser.



  • Hi Wikinger75,
    Deine Frage wird kaum alle Teilnehmer einhellig mit einem bestimmten Ergebnis beantworten, denn dazu sind die Geschmäcker, Prioritäten und Interessen einfach zu unterschiedlich.

    Aber wenn es um das einfachste Win32-API Grundgerüst geht und Du die Punkte von Martin beachtest, siehts so in Ordnung aus (habs nur gelesen, nicht compiliert o.ä.)

    Guck Dir mal zum Vergleich auch das "scratch program" von Raymond Chen an:
    http://blogs.msdn.com/oldnewthing/archive/2003/07/23/54576.aspx
    Er verwendet dieses Grundgerüst für seine Untersuchungen bzw. Erklärungen im Rahmen seines Blogs "The Old New Thing".

    @ Martin Richter:

    Martin Richter schrieb:

    2. WinMain?, Wenn schon TCHAR dann tWinMain!

    tWinMain ?
    Hab ich noch nie gehört (gelesen).
    Wieder was neues gelernt, auch wenns nur ne Kleinigkeit ist, Danke Martin!

    Gruß Martin



  • 1. Warum static?

    Ka^^

    2. WinMain?, Wenn schon TCHAR dann tWinMain!

    Hmm nie gehört, aber gut. THX!^^

    3. WM_PAINT ohne NeginPaint/EndPaint heißt endlose WM_APINT bearbeitung und hohe Prozessorlast

    Muss ich noch einfügen.

    Hi Wikinger75,
    Deine Frage wird kaum alle Teilnehmer einhellig mit einem bestimmten Ergebnis beantworten, denn dazu sind die Geschmäcker, Prioritäten und Interessen einfach zu unterschiedlich.

    Aber wenn es um das einfachste Win32-API Grundgerüst geht und Du die Punkte von Martin beachtest, siehts so in Ordnung aus (habs nur gelesen, nicht compiliert o.ä.)

    Guck Dir mal zum Vergleich auch das "scratch program" von Raymond Chen an:
    http://blogs.msdn.com/oldnewthing/archive/2003/07/23/54576.aspx
    Er verwendet dieses Grundgerüst für seine Untersuchungen bzw. Erklärungen im Rahmen seines Blogs "The Old New Thing".

    Hmm interesanter Artikel.^^

    Kleine Info noch ich habe das Buch "Windows Programmierung 5. Auflage - Das Entwicklerhandbuch zur Win32-API". Da hab ich das her er benutzt auch immer WinMain statt tWinMain und dabei TCHAR, wo ist der unterschied da?
    Ich bin auch im iNet auf folgendes gestoßen
    RegisterClass und RegisterClassEx, wo ist der unterschied von den Normalen und den Ex funktionen?

    Neben Frage:
    Wie sollte man ein WinAPI Prog schreiben? Im Prozeduallem C-Still und das was man braucht in Klassen oder alles Komplett mit Klasen im OOP-C++-Stil?

    Mfg Wikinger75!



  • Du hast den Petzold. Vollziehe einfach nach, was Petzold als Beispiele vorgibt. Damit lernst Du - auch ohne Klassen und OOP - Windows-Anwendungen zu programmieren. Viele Deiner Fragen erledigen sich dann von allein. Alles weitere probierst Du selbst aus. Es gibt keinen allgemein gültigen einzigen Programmierstil.



  • Du hast den Petzold. Vollziehe einfach nach, was Petzold als Beispiele vorgibt. Damit lernst Du - auch ohne Klassen und OOP - Windows-Anwendungen zu programmieren. Viele Deiner Fragen erledigen sich dann von allein. Alles weitere probierst Du selbst aus. Es gibt keinen allgemein gültigen einzigen Programmierstil.

    Gut, dann lese ich mir den Petzold mal richtig durch und wnen noch fragen offen sind kuck ich im iNet nach oder Frage notfalls hier nach^^
    THX for help!^^



  • von welchem wizard ist hier die rede? gibt es so einen im vs2008 pro?


Anmelden zum Antworten