The issue arises because a window/dialog procedure is an alias(typedef) for a pointer to a function taking four parameters and returning a non-void 'value'. Your non-static member class function does not match this type(it's encumbered with this), while a static function does. Obviously, you could also make the callback procedure global or better, if following this approach, limit its scope within a suitable namespace.

This is a common problem which is typically solved by making the callback member function static and providing a mechanism whereby a pointer to a specific class object is available to that static function to forward or otherwise handle the messages. There are other approaches such as using hooks or assembly thunks but they are much more complex in both terms of implementation and comprehension.

Consider the following code using a static dialog procedure; the process is analagous for windows but with CreatWindowEx's final parameter used to pass this with WM_NCREATE initially intercepted instead of WM_INITDIALOG:

Many thanks for your quick answer!
I had thought about the static solution and wasn't very happy with it. But as there isn't an other way to solve it, apart from the global scope solution, I will try to implement it as static.
Once again, many thanks!