Используйте LPARAM dwData для предоставления указателя на объект.Если есть еще данные для обратного вызова, используйте вспомогательную структуру, чтобы собрать все данные вместе и передать указатель на эту структуру.
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
((Class*)dwData)->callback(hMonitor,hdcMonitor,lprcMonitor);
return true;
}
bool Class::callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor)
{
classVar.appendData("callback");
return true;
}
bool Class::f()
{
...
EnumDisplayMonitors(NULL,NULL,MonitorEnumProc, (LPARAM)this);
...
}
РЕДАКТИРОВАТЬ: Со вспомогательной структурой:
BOOL CALLBACK MonitorEnumProc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData)
{
Class theClass = ((Auxiliary*)dwData)->theClass;
RestOfData theRest = ((Auxiliary*)dwData)->theRest;
theClass->callback(hMonitor,hdcMonitor,lprcMonitor, theRest);
return true;
}
bool Class::callback(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, RestOfData* theRest)
{
// use theRest
classVar.appendData("callback");
return true;
}
bool Class::f()
{
...
Auxiliary theBundle(this, theRest);
EnumDisplayMonitors(NULL,NULL,MonitorEnumProc, (LPARAM)theBundle);
...
}