Ok i figured it out. For anyone else who needs it, it looks like this:
Code:
#include <cstdio>
#define MessageHandler(a, b) CMessageHandler((int (CControlClass::*)())(a), b)
class CControlClass;
class CMessageHandler
{
public:
int (CControlClass::*funcPtr)();
CControlClass* controlPtr;
CMessageHandler()
{
funcPtr = 0;
controlPtr = 0;
}
CMessageHandler(int (CControlClass::*pFuncPtr)(), CControlClass* pControlPtr)
{
funcPtr = pFuncPtr;
controlPtr = pControlPtr;
}
int call()
{
return (*controlPtr.*funcPtr)();
}
bool isSet()
{
return funcPtr != 0;
}
};
class CControlClass
{
public:
CMessageHandler onMouseMoveHandle;
int callMouseMove()
{
return onMouseMoveHandle.call();
}
};
class CWindowClass:
public CControlClass
{
};
class CMyWindow:
public CWindowClass
{
public:
int onMouseMove()
{
printf("Hello\n");
return 5;
}
};
int main(int argc, char* argv[])
{
CMyWindow window;
window.onMouseMoveHandle = MessageHandler(&CMyWindow::onMouseMove, &window);
printf("%i\n", window.callMouseMove());
}