Как получить доступ к пользовательским членам класса из метода обратного вызова

Я хочу получить доступ к членам пользовательского класса из метода обратного вызова.

Я получаю доступ 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.
}

Как я могу получить доступ к этому пользовательскому классу?

1

Решение

Ранее я сталкивался с подобной проблемой. Я решил это с помощью переменной пространства имен, потому что функция 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;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector