C++ 如何从回调方法访问自定义类成员

C++ 如何从回调方法访问自定义类成员,c++,class,visual-studio-2013,callback,djvu,C++,Class,Visual Studio 2013,Callback,Djvu,我想从回调方法访问自定义类的成员 我正在访问m_displayImg->bIsPressAndHold=true来自回调函数 i、 e 它给出错误“标识符M_displayImg未定义” 如何访问该自定义类成员?之前,我遇到了类似的问题。我用带名称空间的变量解决了这个问题,因为回调函数不能接受更多的参数,甚至不能在lambda捕获列表中放入任何内容 我的代码示例(不同的内容,但想法保持不变): #包括 #包括 #包括 名称空间监视信息{ //名称空间变量 extern std::vector d

我想从回调方法访问自定义类的成员

我正在访问
m_displayImg->bIsPressAndHold=true来自回调函数

i、 e

它给出错误“标识符M_displayImg未定义”


如何访问该自定义类成员?

之前,我遇到了类似的问题。我用带名称空间的变量解决了这个问题,因为回调函数不能接受更多的参数,甚至不能在lambda捕获列表中放入任何内容

我的代码示例(不同的内容,但想法保持不变):

#包括
#包括
#包括
名称空间监视信息{
//名称空间变量
extern std::vector data=std::vector();
//回调函数
BOOL回调CALLBACK函数(HMONITOR HMONITOR、HDC hdcMonitor、LPRECT lprcMonitor、lpram dwData){
MONITORINFOEX monitorInfo;
monitorInfo.cbSize=sizeof(monitorInfo);
GetMonitorInfo(hMonitor和monitorInfo);
数据。推回(monitorInfo);
返回true;
}
//获取所有监视器数据
std::vector get(){
data.clear();
EnumDisplayMonitors(NULL,NULL,callbackFunction,0);
返回数据;
}
};
int main(){
自动信息=监视器信息::get();
printf(“%d”,info.size());
返回0;
}

首先,请参阅。第二:在不使用全局变量的情况下,将参数(例如关联类)滑入windows回调的典型方法是@HostileFork先生,我已经修改了这个问题。这个问题并不特别相关,因为它没有显示包含
m_displayImg
m_startPoint
的类。您可能希望将该类与HWND关联。无论该类是什么,它都是一个将指针保存在HWND的GWL_USERDATA中的类(当它创建或传入HWND时),然后从调用DoCircuitHighlighting的
hwnd
参数中提取指针。@HostileFork DoCircuitHighlighting基本上是在另一个名为“CDjVuControlCtrl”的类的对象上执行某些操作。为了简单起见,我省略了它。如果你想要你可以应用的代码,你必须给出一个合适的MCVE。除此之外,我所能说的是,你的机械问题是,普通C函数不是成员函数——它们没有“this”指针。您不能传递成员函数并在需要普通C回调的地方使用它。您需要一个全局变量来访问相关的类,或者需要一种从hwnd获取它的方法——我将如何操作链接到这里。
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.
}
#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;
}