カスタムインデックスにデータを保存するには、どうすればSetWindowLongPtr(_In_ HWND hWnd, _In_ int nIndex, _In_ LONG_PTR dwNewLong)
を使用できますか?カスタムインデックスにデータを格納:GWLP_USERDATA_EX?
たとえば、
SetWindowLongPtr(hwnd, GWLP_USERDATA_CUSTOM, (LONG_PTR)dispatcher);
msdn documentationから; nIndex
パラメータは次のとおりです。
設定する値の0から始まるオフセットです。有効な値は、範囲0から余分なウィンドウメモリのバイト数から整数のサイズを差し引いたものです。
これはどういう意味ですか?利用可能な余分なウィンドウメモリバイトの数はどのようにして決められますか?本質的に、私はすでにポインタを格納するためにGWLP_USERDATA
を使用しているので、私は部屋を使い果たしました。別のインデックスに情報を格納することができれば、非常に便利です。
ウィンドウクラスを登録するときに割り当てられる余分なバイト数を宣言します。そのプロセスのドキュメントは説明しています。 –
* "既にポインタを格納するためにGWLP_USERDATAを使用していますので、部屋がなくなりました" * - つまり、このウィンドウのクラスを登録していない(または単に部屋を要求している)ということです。その場合、 'GWLP_USERFATA'を使うことはすでにバグです。それはあなたのものではありません。 – IInspectable
つまり、ポインタを格納していると、本質的に無制限の量のメモリを自由に使うことができます。ポインタが、必要なすべてのデータを含む構造体を指し示すようにするだけです。ただし、 'GWLP_USERDATA'は、CreateWindowExを呼び出してウィンドウを作成した人ではなく、RegisterClassExを呼び出してウィンドウクラスを登録した人のためのものです。 SetPropは許容される解決策です。 –