Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Allegro Tutorial gesucht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ] [ 3 ]
000
25.03.2005, 12:34 Uhr
~radix
Gast


Hi,

kennt jemand ein Gutes Allegrotutorial?
Am besten wärs auf Deutsch, aber Eng geht auch noch...

Thanx
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.03.2005, 17:33 Uhr
~radix
Gast


Hi Leutz,

bins nochmal, so schnell kann man seine Meinung ändern...
Also nix Allegro mehr.
Wie geht den Double Buffering mit GDI?

Thanx MfG radix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.03.2005, 23:07 Uhr
Hans
Library Walker
(Operator)


Hi,

auch wenn Du es Dir inzwischen anders überlegt hast, sieh mal hier nach. Das hat eine kurze Websuche bei mir ergeben, weil die Frage mich auch mal kurz interessierte.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.03.2005, 20:00 Uhr
~radix
Gast


Danke ich werds mir mal anschauen....

Hab mal n Prob mit der WinGDI:


C++:


#define STRICT
#define CName "My Application"
#include <windows.h>


const int WindowXSize = 640;
const int WindowYSize = 480;


HWND hwnd;

inline int MyLoop();
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    WNDCLASS wc;

    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wc.hInstance = hInstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = CName;
    wc.lpszMenuName = NULL;
    wc.style = CS_VREDRAW|CS_HREDRAW;

    RegisterClass(&wc);
    hwnd = CreateWindow(CName, CName, WS_POPUP|WS_SYSMENU, 100, 100, WindowXSize, WindowYSize, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    MSG msg;

    while ( msg.message != WM_QUIT )
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
            MyLoop();
    }

    return msg.wParam;
}


//////////////////////////
//////////////////////////


HDC hdc;
HDC hdc2;
HBITMAP bmp;


LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
    switch(msg)
    {
    case WM_CREATE:
        hdc = GetDC(hwnd);
        hdc2 = CreateCompatibleDC(hdc);
        bmp = CreateCompatibleBitmap(hdc, WindowXSize, WindowYSize);
        SelectObject(hdc2, bmp);
        
        return 0;

    

    case WM_PAINT:
        BitBlt(hdc, 0, 0, WindowXSize, WindowYSize, hdc2, 0, 0, SRCCOPY);

        return 0;


    
    case WM_DESTROY:
        DeleteObject(bmp);
        ReleaseDC(hwnd, hdc2);
        ReleaseDC(hwnd, hdc);

        PostQuitMessage(0);

        return 0;


    
    case WM_KEYDOWN:
        if (wp == VK_ESCAPE)
            SendMessage(hwnd, WM_DESTROY, 0, 0);
            
        return 0;
    }    
    return DefWindowProc(hwnd, msg, wp, lp);
}


inline int MyLoop()
{
    TextOut(hdc2, 10,10,"H", 1);
    InvalidateRect(hwnd, NULL, FALSE);
    return 0;
}



Soviel zum Code:

Soll n Double Buffering test darstellen. Nur es funzt nich, irgenwie wird kein "H" angezeit...
Wenn ich aber das TextOut(hdc2,...) in die WM_PAINT rein packe, dann gehts.
Ich wollt aber unbedingt in der MyLoop() auf den BackBuffer zeichnen.

Hilfe und sonstige Verbesserungsvorschläge zum Code herzlich willkommen

MfG radix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.03.2005, 20:08 Uhr
~radix
Gast


@ Hans:

Thanx, das AllegroTut is jut
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.03.2005, 10:34 Uhr
Oliver
S2-Pixelgeneral



C++:
#define STRICT
#define CName "My Application"
#include <windows.h>


const int WindowXSize = 640;
const int WindowYSize = 480;


LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    WNDCLASS wc;

    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hIcon = LoadIcon(NULL, IDI_WINLOGO);
    wc.hInstance = hInstance;
    wc.lpfnWndProc = WndProc;
    wc.lpszClassName = CName;
    wc.lpszMenuName = NULL;
    wc.style = CS_VREDRAW|CS_HREDRAW;

    RegisterClass(&wc);
    hwnd = CreateWindow(CName, CName, WS_POPUP|WS_SYSMENU, 100, 100, WindowXSize, WindowYSize, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
    
    MSG msg;

    while ( msg.message != WM_QUIT )
    {
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        // Das hier kann weg, kann gleich einmalig bei WM_CREATE getan werden
        else
        {
        }
    }

    return msg.wParam;
}


//////////////////////////
//////////////////////////




LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp)
{
    // Globale Variablen vermeiden!
    static HDC hdc;
    static HDC hdc2;
    static HBITMAP bmp;
    

    switch(msg)
    {
    case WM_CREATE:
        hdc = GetDC(hwnd);
        hdc2 = CreateCompatibleDC(hdc);
        bmp = CreateCompatibleBitmap(hdc, WindowXSize, WindowYSize);
        SelectObject(hdc2, bmp);
        // Einmalig reicht
        TextOut(hdc2, 10,10,"H", 1);
        
        return 0;


    case WM_PAINT:
        // bei WM_PAINT immer BeginPaint benutzen
        PAINTSTRUCT ps;
        BeginPaint(hwnd,&ps);
        BitBlt(ps.hdc, 0, 0, WindowXSize, WindowYSize, hdc2, 0, 0, SRCCOPY);
        EndPaint(hwnd,&ps);

        return 0;


    
    case WM_DESTROY:
        DeleteObject(bmp);
        ReleaseDC(hwnd, hdc2);
        ReleaseDC(hwnd, hdc);

        PostQuitMessage(0);

        return 0;


    
    case WM_KEYDOWN:
        if (wp == VK_ESCAPE)
            SendMessage(hwnd, WM_DESTROY, 0, 0);
            
        return 0;
    }    
    return DefWindowProc(hwnd, msg, wp, lp);
}


--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )

Dieser Post wurde am 27.03.2005 um 10:34 Uhr von Oliver editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.03.2005, 19:32 Uhr
mauralix



ich habe deutsche Tutorials geschrieben.
Schau mal auf meine Site

www.mauralix.at.tt

Dort ist ein Allegro tutorial für Anfänger
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.03.2005, 09:41 Uhr
~radix
Gast


Hi,

danke für das Tut und den Code.

Aber mal angenommen, ich würde ein Game schreiben, da müsste ich doch aus Performance-Gründen doch MyLoop() mit reinnehmen, oder?
Und angenommen, ich hätte das getan ist doch die einzige Möglichkeit, dass MyLoop() und WndProc(...) auf die gleichen Variablen zugreifen, indem is sie globalisiere ( ), oder?
Oder kann man da was mit static machen???


MfG Ratlos
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.03.2005, 20:35 Uhr
mauralix



Das Problem ist das wenn du die <windows.h> nutzt dann funktionieren die allegro Befehle nicht einwandfrei.

Allegro ist eine plattformübergreifende Lib !!!
--
nur olfaktorisch fassbar....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
29.03.2005, 11:00 Uhr
Oliver
S2-Pixelgeneral



Zitat von ~radix:
Hi,

danke für das Tut und den Code.

Aber mal angenommen, ich würde ein Game schreiben, da müsste ich doch aus Performance-Gründen doch MyLoop() mit reinnehmen, oder?
Und angenommen, ich hätte das getan ist doch die einzige Möglichkeit, dass MyLoop() und WndProc(...) auf die gleichen Variablen zugreifen, indem is sie globalisiere ( ), oder?
Oder kann man da was mit static machen???


MfG Ratlos



Normalerweise schreibst du dir ne Gameklasse, wo du dann alles reinpackst.
--
Demokratie ist die Diktatur der Mehrheit.

www.siedler25.org/ ( Siedler2 - Remake )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: