2008-12-02 27 views
6

Tôi đang tạo móc nối bàn phím, trong đó KeyboardProc là thành viên tĩnh của lớp CWidget.SetWindowsHookEx, KeyboardProc và các thành viên không tĩnh

class CWidget 
{ 
    static LRESULT CALLBACK KeyboardProc(int code, WPARAM wParam, LPARAM lParam); 

}; 

Tôi muốn gọi các thành viên không tĩnh của CWidget bên trong CWidget :: KeyboardProc.

Cách tốt nhất để làm điều đó là gì?

Bàn phímProc không có bất kỳ DWORD 32 bit nào mà tôi có thể chuyển con trỏ 'this' này.

Trả lời

6

Cho rằng có lẽ bạn chỉ muốn một bàn phím móc lắp đặt tại một thời điểm, chỉ cần thêm một thành viên pThis tĩnh để lớp học của bạn:

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. */ 
}; 
Các vấn đề liên quan