2

Windows GUI アプリケーションを作成しようとしています。

ウィンドウ プロシージャ関数でいくつかの静的変数を宣言し、へのポインタWM_CREATEである で初期化しました。ただし、これらの値は静的であるため、作成できるウィンドウのインスタンスは 1 つだけです。さらに作成すると、以前のインスタンスのデータが新しいデータに変更されます。この問題を解決できるように、メッセージの後にウィンドウにアクセスする方法はありますか?lParamCREATESTRUCTCREATESTRUCTWM_CREATE

4

1 に答える 1

4

またはWM_CREATEを使用してユーザー定義構造体へのポインタを保存し、対応する関数で取得します。SetWindowLongPtrSetProp

例えば

case WM_CREATE:
    SetWindowLongPtr(hWnd, GWLP_USERDATA, ((LPCREATESTRUCT)lParam)->lpCreateParams);
    break;

case <other messages>:
    MyData* pData = (MyData*)GetWindowLongPtr(hWnd, GWLP_USERDATA).

GWLP_USERDATA使用するべきではなく、代わりにウィンドウ クラスにストレージ スペースを予約する必要があると主張する人もいます。これはあなた次第です。SetProp/を使用GetPropすることも有効な代替手段です。

于 2013-06-29T07:20:01.140 に答える