Is there a way to wrap WndProc as private member?
If I have this:
class Window
{
public:
Window();
virtual ~Window();
void create();
private
Make it static:
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
You should add the static
modifier to it.
The reason for this, is that when it's a member function (which I believe is a __thiscall
in Visual C++), it's actually just a C function taking this
as the first parameter. This would look like this:
LRESULT CALLBACK WndProc(Window& this, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
If you make it static, the compiler gets rid of the first Window& this
parameter, making it compatible with lpfnWndProc
.
Yes, it is possible to include a WndProc as a class member. Furthermore, you can modify other class members from it. The trick is to use two WndProc functions, one of them static.