Я хочу получить доступ к членам пользовательского класса из метода обратного вызова.Как получить доступ к пользовательским членам класса из метода обратного вызова
Я обращаюсь к 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.
}
Как я могу получить доступ к этому пользовательскому члену класса?
Во-первых, см [Minimal, Complete, Проверяемость Пример] (http://stackoverflow.com/help/mcve). Во-вторых: типичный способ проскальзывания параметров (например, связанный класс) с обратными вызовами Windows без использования глобальных переменных заключается в [помещать их в поле HWND GWL_USERDATA] (http://stackoverflow.com/q/14883556/211160). – HostileFork
@HostileFork Сэр, я изменил вопрос. –
[код, добавленный вами] (http://stackoverflow.com/revisions/41820817/2) не имеет особого значения, поскольку он не отображает класс, который содержит 'm_displayImg' или' m_startPoint'. Это * тот * класс, который вы хотели бы связать с HWND, предположительно. Независимо от того, что этот класс, это тот, где вы сохранили бы свой указатель в GWL_USERDATA HWND (когда он получит свой HWND, созданный или переданный), а затем извлеките указатель из параметра 'hwnd' DoCircuitHighlighting, когда он вызывается. – HostileFork