2008-12-02 6 views
6

Je crée un hook clavier, KeyboardProc étant un membre statique d'un CWidget de classe. Je souhaite appeler les membres non statiques de CWidget dans le CWidget :: KeyboardProc.Membres de SetWindowsHookEx, KeyboardProc et non-static

Quelle est la meilleure façon de le faire? KeyboardProc n'a pas de DWORD 32 bits où je peux passer le pointeur 'this'.

Répondre

6

Étant donné que vous voulez probablement qu'un seul crochet du clavier installé à un moment, ajoutez simplement un membre de pThis statique à votre classe:

class CWidget 
{ 
    static HHOOK m_hHook; 
    static CWidget *m_pThis; 

public: 
    /* NOT static */ 
    bool SetKeyboardHook() 
    { 
     m_pThis = this; 
     m_hHook = ::SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, /* etc */); 
    } 

    // Trampoline 
    static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam) 
    { return m_pThis->KeyboardProc(code, wParam, lParam); } 

    LRESULT KeyboardProc(int code, WPARAM wParam, LPARAM lParam); 

    /* etc. */ 
}; 
Questions connexes