1
コールバックメソッドからカスタムクラスのメンバーにアクセスしたいとします。コールバックメソッドからカスタムクラスメンバーにアクセスする方法
コールバック関数から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.
}
カスタムクラスメンバーにアクセスするにはどうすればよいですか?
は、(http://stackoverflow.com/help/mcve)検証可能例、完全、最小]を参照。第2に、グローバル変数を使用せずにパラメータ(例:関連するクラス)をWindowsのコールバックに伝える一般的な方法は、それらをHWNDのGWL_USERDATAフィールドに入れることです(http://stackoverflow.com/q/14883556/211160)。 – HostileFork
@HostileFork先生、私は質問を修正しました。 –
[追加したコード](http://stackoverflow.com/revisions/41820817/2)は、 'm_displayImg'や' m_startPoint'を含むクラスを表示しないので特に関係ありません。おそらくHWNDに関連付けることを望むクラスです。そのクラスが何であれ、HWNDのGWL_USERDATAにポインタを保存し(HWNDが作成または渡されたとき)、DoCircuitHighlightingの 'hwnd'パラメータからポインターを取り出します。 – HostileFork