4

標準のウィンドウプロシージャ関数は、次のプロトタイプを使用します。

LRESULT CALLBACK WndProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);

WM_MOUSEMOVEまたはなどのメッセージが送信されるWM_CHARと、WndProc関数はメッセージの発信元のウィンドウと、msgおよびwParam/lParamを使用する追加のパラメーターを受け取ります。

私が今持っているのはクラスです。言う

class Random
{
    public:
        void Initialize ();

    private:
        void Draw ();
        HWND hWnd;

    friend LRESULT CALLBACK RandomProc (HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
};

hWndによって初期化および作成された後、Initialize ()になどのメッセージを送信WM_LBUTTONDOWNしますRandomProc。メッセージを受信したら、クラスのウィンドウを再描画するRandomProcために使用したいと思います。Draw ()Random

重要なのは、複数のRandom変数があり、それぞれにウィンドウがあるということです。すべてのウィンドウはにメッセージを送信しRandomProc、の対応するウィンドウを再描画する必要がありhWndます。hWndパラメータまたはmsg/wParam / lParamに基づいてどの確率変数がメッセージを送信したかわからないため、適切なDraw ()関数にアクセスできず、正しいウィンドウを再描画できません。

メッセージが送信されるたびにウィンドウのクラスへのポインタをプロシージャに渡す方法はありますか、またはhWndがメッセージを送信したRandomクラスにアクセスする別の方法はありますか?

4

1 に答える 1

8

GetWindowLongPtr/SetWindowLongPtr関数を探していませんか?

この関数は、ウィンドウハンドルとの間で任意のポインタを割り当て/取得します。作成する各ウィンドウに、ランダムクラスインスタンスへのポインタを割り当てることができます。で、RandomProcを使用しGetWindowLongPtrてポインタをにキャストしますRandom*

クリスがコメントで言っているように、GWLP_USERDATA属性を使用してポインターを割り当てます。

于 2012-05-26T13:01:40.637 に答える