Как обернуть Win32 WndProc в класс C ++? - PullRequest
2 голосов
/ 08 января 2012

Возможно ли это вообще? Например, допустим, у меня есть следующее:

class Window {
private:
    WNDCLASSEX wc;
public:
    inline WNDCLASSEX getWindowClass() {
        return wc;
    }
    Window();
    LRESULT CALLBACK WndProc(HWND hwnd, UINT message, LPARAM lParam, WPARAM wParam);
}

void RegisterWindow(Window win) {
    WNDCLASSEX* wc = win.getWindowClass();
    RegisterClassEx(wc);

}

Теперь где-то будет раздел (возможно, в конструкторе класса Window, где необходимо присвоить WNDCLASSEX a WndProc, что отмечено в классе Window. Единственная проблема заключается в том, что, поскольку это часть класса, возникает ошибка. Таким образом, как это достигается? Является ли он статическим? Даже если класс обертывает его, он все равно остается частью класса. Если я создаю это вне класса, это просто стирает точку.

1 Ответ

4 голосов
/ 08 января 2012

Вы передаете указатель this как GWLP_USERDATA на SetWindowLongPtr, что фактически позволяет вам просто перенаправить функцию free функции-члену.

...