SetTimer + CallbackFunktion



  • Also ich hab jetzt aufgehört dannach zu suchen.....

    Wie funktioniert das mit Callback-Funktionen, speziell bei SetTimer??

    ich bekomme folgende Fehlermeldung:

    error C2664: 'CWnd::SetTimer' : cannot convert parameter 3 from 'void (HWND,UINT,UINT_PTR,DWORD)' to 'void (__stdcall *)(HWND,UINT,UINT_PTR,DWORD)'

    So sieht meine Funktion aus:

    void CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT_PTR nIDEvent, DWORD dwTime);
    

    Ob das CALLBACK jetzt da steht oda nicht, stört die Fehlermeldung wenig....

    Also wo mache ich was falsch??? Muss ich den 3. Parameter casten???

    Bin für jede hilfe dankbar....



  • Nimm mal UINT statt UINT_PTR...

    cu para
    😃

    Bin mir aber nicht ganz sicher...



  • nö.....das is es auch nicht......



  • ok...also wenn die funktion static is, gehts.....aba jetzt kommt das nächste Problem:

    Beim Aufruf von z.B. MessageBox:

    error C2352: 'CWnd::MessageBoxA' : illegal call of non-static member function

    Also muss ich MessageBox irgendwie anders aufrufen....über welche Variable bzw. wie stell ich das jetzt an`??



  • ::MessageBox ohne das CWnd davor



  • der aufruf lautet:

    MessageBox("kdf","kdf",MB_OK);
    

    das CWnd:: schreibt er nur in der Fehlermeldung....

    Aber trotzdem: mit ::MessageBox() funktionierts...danke!!



  • ...aber wie kann ich jetzt zum Beispiel eine Funktion meines Dialoges aufrufen????

    ::onOK() funktioniert zum Beispiel nicht??!!



  • ne, weil die funktion statisch ist, kann man nicht auf die member zugreifen. du könntest den klassenzeiger global speichern und dann darauf zugreifen



  • danke....
    hab mir jetzt in der zwischezeit mit einem SendDlgItemMessage und BM_CLICK geholfen....



  • Original erstellt von <sta>:
    ne, weil die funktion statisch ist, kann man nicht auf die member zugreifen. du könntest den klassenzeiger global speichern und dann darauf zugreifen

    Globale Variablen in C++ ... scheiße!!! Ne, gib der Callback-Funktion einfach den Pointer auf deine Klasseninstanz mit. Ganz einfach. 😉

    [ Dieser Beitrag wurde am 03.04.2003 um 01:32 Uhr von WebFritzi editiert. ]



  • lustig fritzi. die api ist eben leider c und da muss man mal eben ein paar schlechte sachen machen, wenn man sowas braucht. die SetTimer Api bietet keine Möglichkeit einen Wert auf die Klasseninstanz mitzugeben.

    Wenn doch, dann sag mir wie und wo das möglich ist. 🙂



  • Du hast recht. Ich war so daran gewöhnt, denn bei den meisten Callbacks gibt es so einen optionalen DWORD-Parameter. Man könnte den Zeiger aber noch in der USER-DATA des HWNDs speichern.


Anmelden zum Antworten