Is there a way to wrap WndProc as private member?
If I have this:
class Window
{
public:
Window();
virtual ~Window();
void create();
private:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
};
And in my create() this:
WNDCLASSEX wc;
wc.lpfnWndProc = (WNDPROC) &Window::WndProc;
I get this warning:
warning: converting from 'LRESULT (Window::*)(HWND, UINT, WPARAM, LPARAM) {aka long int (Window::*)(HWND__*, unsigned int, unsigned int, long int)}' to 'WNDPROC {aka long int (__attribute__((__stdcall__)) *)(HWND__*, unsigned int, unsigned int, long int)}' [-Wpmf-conversions]
And my window HWND is NULL, GetLastError() also returns 0.
How can this be fixed?
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 .
Make it static:
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With