Я хочу получить доступ к членам пользовательского класса из метода обратного вызова.
Я получаю доступ m_displayImg->bIsPressAndHold = true;
от функций обратного вызова.
то есть
Выдает ошибку «Идентификатор M_displayImg не определен».
class CDisplayImage
{
public:
CDisplayImage(void);
virtual ~CDisplayImage(void);
int Initialize(HWND hWnd, CDC* dc, IUnknown* controller);
void Uninitialize(int context);
BOOL bIsPressAndHold = false;
//code omitted
};VOID CALLBACK DoCircuitHighlighting(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
{
m_displayImg->bIsPressAndHold = true;
// I have omitted code for simplicity.
}
Как я могу получить доступ к этому пользовательскому классу?
Ранее я сталкивался с подобной проблемой. Я решил это с помощью переменной пространства имен, потому что функция CALLBACK не может принимать больше параметров, вы даже не можете поместить что-либо в список лямбда-захвата.
Пример моего кода (другой контент, но идея остается прежней):
#include <windows.h>
#include <algorithm>
#include <vector>
namespace MonitorInfo {
// namespace variable
extern std::vector<MONITORINFOEX> data = std::vector<MONITORINFOEX>();
// callback function
BOOL CALLBACK callbackFunction(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) {
MONITORINFOEX monitorInfo;
monitorInfo.cbSize = sizeof(monitorInfo);
GetMonitorInfo(hMonitor, &monitorInfo);
data.push_back(monitorInfo);
return true;
}
// get all monitors data
std::vector<MONITORINFOEX> get(){
data.clear();
EnumDisplayMonitors(NULL, NULL, callbackFunction, 0);
return data;
}
};
int main(){
auto info = MonitorInfo::get();
printf("%d", info.size());
return 0;
}
Других решений пока нет …