Ergebnis 1 bis 8 von 8

Thema: Einfaches [?] Programm schreiben

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #5
    So schaut das jetzt aus:
    Das Erstellen von Buttons geht jetzt aber leichter und ist nicht ganz so komplex, dies ist praktisch nun das Grundgerüst welches man immer braucht. Demnach kann man es leicht geändert übernehmen und dort dann weiterbasteln.


    Code:
    #include <windows.h>
    
    LRESULT CALLBACK wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
    
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
        MSG msg;
        HWND hwnd;
        WNDCLASS wndclass;
    
        wndclass.style = 0;
        wndclass.lpfnWndProc = wndproc;
        wndclass.cbClsExtra = 0;
        wndclass.cbWndExtra = 0;
        wndclass.hInstance = hInstance;
        wndclass.hIcon = LoadIcon(NULL, IDI_INFORMATION);
        wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
        wndclass.hbrBackground = (HBRUSH) COLOR_MENU + 3;
        wndclass.lpszMenuName = NULL;
        wndclass.lpszClassName = TEXT("Klassenname");
    
        if (!RegisterClass(&wndclass))
        {
            MessageBox(NULL, "Klasse konnte nicht registriert werden", "Error!", MB_ICONERROR);
            return 0;
        }
    
        hwnd = CreateWindowEx(  0,
                                TEXT("Klassenname"),
                                "Testfenster",
                                WS_OVERLAPPEDWINDOW,
                                100, 100, 500, 500,
                                0,
                                0,
                                hInstance,
                                0);
    
        ShowWindow(hwnd, SW_SHOWNORMAL);
        UpdateWindow(hwnd);
    
        while (GetMessage(&msg,NULL,0,0))	//Is There A Message Waiting?
    	{
        	TranslateMessage(&msg);				//Translate The Message
    		DispatchMessage(&msg);				//Dispatch The Message
        }
        return 0;
    }
    
    
    LRESULT CALLBACK wndproc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
        {
            case WM_DESTROY:
                PostQuitMessage(0);
                return 0;        
        }
        
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    Das Gegenstück in PureBasic wäre dann dieses:


    Code:
    OpenWindow(0, 100, 100, 500, 500, #PB_WINDOW_SYSTEMMENU, "Testfenster")
    
    Repeat
        EventID = WaitWindowEvent()
    
        Select EventID
            Case #PB_EVENT_CLOSEWINDOW
                End
        EndSelect
    ForEver
    Wie man sieht, wesentlich weniger Code, wesentlich einfacher. Aber man lernt weniger und hat nicht die absolute volle Kontrolle wie man sie mittels WinAPI und C/C++ hätte.

    Nachtrag: Ein Vorteil von C++ ist die Möglichkeit, in OOP zu Programmieren. Das bietet PureBasic nicht. Damit kann man sich wunderbar Methoden und Klassen erstellen welche dann auch mit nur einer Zeile ein Fenster erstellen. Bei mir sieht das derzeit so aus:

    Kleiner Ausschnitt:
    Code:
        flags = WS_CHILD |WS_VISIBLE | WS_CLIPCHILDREN;
        glwindow.create(hinstance, msg, WndProc, screen.pos_x, screen.pos_y, screen.size_x, screen.size_y, "Gl-Window", mainwindow.get_hwnd(), WS_EX_CLIENTEDGE, flags);
    
        if (!glwindow.create_gl_rc(screen.client_size_x, screen.client_size_y, GL_PROJECTION) || !InitGL())       //If unable to create gl-context or initialize values
        {
            mainwindow.destroy();       //Destroy and Unregister Mainwindow
        }
    Mit der ersten Zeile werden Styles für das Fenster gewählt, also das Aussehen bestimmt. Mit Zeile 2 wird das Fenster erstellt und mit Zeile 3 wird diesem Fenster ein OpenGL-RenderContext hinzugefügt wodurch man nun mit OpenGL darauf zeichnen kann.
    Die eigentlichen Zeilen die dorthinter stecken sind natürlich weitaus länger als das hier, aber es lässt sich alles in einzelne Zeilen packen, OOP sei Dank.

    BTW. Ich hab mit der WinAPI Programmierung im Dezember 2004 angefangen, um genau zu sein am 30. November 2004. Es ist also durchaus möglich, sich ein einigermaßen ordentliches Wissen in der WinAPI anzueignen innerhalb eines halben Jahres. Dann kann man schon in der Lage sein, mehrere Fenster, Buttons, Menüs, Toolbars und solche Sachen zu erstellen. Wobei ich nicht durchgehend mich mit der WinAPI befasst habe sondern auch mal eine Runde 2D-Spielchen mit OpenGL eingeschoben habe.

    Geändert von Ynnus (04.06.2005 um 15:04 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •