2012-01-08 4 views
2

Возможно ли это? Например, предположим, что у меня есть следующие:Как обернуть win32 WndProc в класс C++?

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 в WndProc, который отмечается в классе Window. Единственная проблема в том, что, поскольку это часть класса, возникает ошибка. Таким образом, как это достигается? Стабильно ли это? Даже если, если класс обертывает его, он все еще остается частью класса в некотором роде. Если я создаю его вне класса, это просто уничтожит точку.

+0

См. MFC, это WndProc, завернутый в классы C++. – Abyx

+0

Никогда не смотрите MFC. Для чего угодно. – Puppy

+0

У вас нет ничего выше Express edition, поэтому я не могу его использовать. – zeboidlund

ответ

4

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

+1

Хм, я не совсем понимаю: что вы подразумеваете под GWLP_USERDATA и SetWindowLongPtr? – zeboidlund

+1

@Holland: Если вы Google «SetWindowLongPtr» и щелкните по первому * результату ... – Puppy

+0

Ну, я не могу это использовать, потому что мой «HWND» еще не был инициализирован. – zeboidlund