Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » Callback-Funktionen

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 <
000
20.05.2005, 14:27 Uhr
~e1sbaer
Gast


Hallo, habe das problem, dass ich mir eine Window-Klasse erstellen wollte, die mit GLUT ein Fenster erstellt und Member-Funktionen als Callback-routinen dafür registriert. Der Compiler sagt, dass das mit non-static Funktionen nicht gehen würde, was aber sehr doof ist, da mehrere Instanzen von dieser Klasse später erzeugt werden sollen und jede Instanz ihre eigene Callback-Routine haben soll.

Kann mir da jemand weiterhelfen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.08.2005, 19:50 Uhr
DarthDevilous



Zeurst baust du eine List oder verkettete Liste deiner Fenster-Objekte. Den Rückgabewert von glutCreateWindow musst du als member dieser klasse abspeichern. Im callback rufst du dan glutGetWindow. Den Rückgabewert dieser Funktion vergleichst du mit dem abgespeicherten Wert jedes Fenster-Objektes. Wenn es übereinstimmt, hast du dein Fenster.


C++:
class glutWindow
{
    glutWindow(void);
    ~glutWindow(void);
public:
    void Create(const char* pszName);
    glutWindow *pNextWindow;
    int glutWindowID;
    OnDisplay(int WindowID);
protected:
    static glutWindow *pFirstWindow;
    static void glutDisplayCallback(void);
};

glutWindow::glutWindow(void)
{
    pNextWindow = pFirstWindow;
    pFirstWindow = this;
}

glutWindow::~glutWindow(void)
{
    if (pFirstWindow = this)
        pFirstWindow = pNextWindow;
    else
        for (glutWindow pWindow = pFirstWindow;
            pWindow;
            pWindow = pWindow->pNextWindow)
            if (pWindow->pNextWindow = this)
                pWindow->pNextWindow = pNextWindow;
}

glutWindow::Create(const char *pszName)
{
    glutWindowID = glutCreateWindow(pszName);
}

glutWindow::OnDisplay(int WindowID)
{
    if (WindowID == glutWindowID)
        ;// Display-Code
    else
        pNextWindow->OnDraw(WindowID);
}

void glutWindow::glutDisplayCallback(void)
{
    int WindowID = glutGetWindow();
    pFirstWindow->OnDisplay(WindowID);
}


Dieser Post wurde am 04.08.2005 um 20:24 Uhr von DarthDevilous editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


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: