次の方法で共有


SetWindowLongPtrW 関数 (winuser.h)

指定したウィンドウの属性を変更します。 また、この関数は、追加のウィンドウ メモリ内の指定されたオフセットに値を設定します。

メモ 32 ビットバージョンと 64 ビット バージョンの両方の Windows と互換性のあるコードを記述するには、SetWindowLongPtr使用します。 32 ビット Windows 用にコンパイルする場合、SetWindowLongPtr は、SetWindowLong 関数の呼び出しとして定義されます。

 

構文

LONG_PTR SetWindowLongPtrW(
  [in] HWND     hWnd,
  [in] int      nIndex,
  [in] LONG_PTR dwNewLong
);

パラメーター

[in] hWnd

型: HWND

ウィンドウへのハンドルと、ウィンドウが属するクラスを間接的に指定します。 hWnd パラメーターで指定されたウィンドウを所有するプロセスが、呼び出し元のスレッドが存在するプロセスよりも高いプロセス特権にある場合、SetWindowLongPtr 関数は失敗します。

Windows XP/2000: hWnd パラメーターで指定されたウィンドウが呼び出し元のスレッドと同じプロセスに属していない場合、SetWindowLongPtr 関数は失敗します。

[in] nIndex

型: int

設定する値への 0 から始まるオフセット。 有効な値は、余分なウィンドウ メモリのバイト数から、LONG_PTRのサイズを引いた範囲の 0 です。 その他の値を設定するには、次のいずれかの値を指定します。

価値 意味
GWL_EXSTYLE
-20
新しい 拡張ウィンドウ スタイルのを設定します。
GWLP_HINSTANCE
-6
新しいアプリケーション インスタンス ハンドルを設定します。
GWLP_ID
-12
子ウィンドウの新しい識別子を設定します。 ウィンドウを最上位のウィンドウにすることはできません。
GWL_STYLE
-16
新しい ウィンドウ スタイルのを設定します。
GWLP_USERDATA
-21
ウィンドウに関連付けられているユーザー データを設定します。 このデータは、ウィンドウを作成したアプリケーションで使用するためのものです。 その値は、最初は 0 です。
GWLP_WNDPROC
-4
ウィンドウ プロシージャの新しいアドレスを設定します。
 

次の値は、hWnd パラメーターがダイアログ ボックスを識別する場合にも使用できます。

価値 意味
DWLP_DLGPROC
DWLP_MSGRESULT + sizeof(LRESULT)
ダイアログ ボックス プロシージャへの新しいポインターを設定します。
DWLP_MSGRESULT
0
ダイアログ ボックス プロシージャで処理されるメッセージの戻り値を設定します。
DWLP_USER
DWLP_DLGPROC + sizeof(DLGPROC)
ハンドルやポインターなど、アプリケーションに対してプライベートな新しい追加情報を設定します。

[in] dwNewLong

型: LONG_PTR

置換値。

戻り値

型: LONG_PTR

関数が成功した場合、戻り値は指定したオフセットの前の値になります。

関数が失敗した場合、戻り値は 0 です。 拡張エラー情報を取得するには、GetLastError呼び出します。

前の値が 0 で、関数が成功した場合、戻り値は 0 ですが、関数は最後のエラー情報をクリアしません。 成功または失敗を判断するには、SetLastError 0 を呼び出して最後のエラー情報をクリアしてから、SetWindowLongPtr呼び出します。 関数の失敗は、戻り値が 0 で、GetLastError 0 以外の結果で示されます。

備考

特定のウィンドウ データはキャッシュされるため、SetWindowLongPtr 使用して行った変更は、SetWindowPos 関数を呼び出すまで有効になりません。

SetWindowLongPtrGWLP_WNDPROC インデックスと共に使用してウィンドウ プロシージャを置き換える場合、ウィンドウ プロシージャは、WindowProc コールバック関数の説明で指定されているガイドラインに従う必要があります。

SetWindowLongPtr DWLP_MSGRESULT インデックスと共に使用して、ダイアログ ボックス プロシージャによって処理されるメッセージの戻り値を設定する場合、ダイアログ ボックス プロシージャは直後に TRUE 返す必要があります。 それ以外の場合、ダイアログ ボックス プロシージャでウィンドウ メッセージを受信する関数を呼び出すと、入れ子になったウィンドウ メッセージによって、DWLP_MSGRESULTを使用して設定した戻り値が上書きされる可能性があります。

GWLP_WNDPROC インデックス SetWindowLongPtr を呼び出すと、ウィンドウの作成に使用されるウィンドウ クラスのサブクラスが作成されます。 アプリケーションはシステム クラスをサブクラス化できますが、別のプロセスによって作成されたウィンドウ クラスをサブクラス化することはできません。 SetWindowLongPtr 関数は、特定のウィンドウ クラスに関連付けられているウィンドウ プロシージャを変更してウィンドウ サブクラスを作成し、システムが前のウィンドウ プロシージャではなく新しいウィンドウ プロシージャを呼び出します。 アプリケーションは、CallWindowProcを呼び出して、新しいウィンドウ プロシージャで処理されていないメッセージ 前のウィンドウ プロシージャに渡す必要があります。 これにより、アプリケーションはウィンドウ プロシージャのチェーンを作成できます。

RegisterClassEx 関数で使用される WNDCLASSEX 構造体の cbWndExtra メンバーに 0 以外の値を指定して、追加のウィンドウ メモリを予約します。

子ウィンドウの親 変更するには、GWLP_HWNDPARENT インデックスを使用して SetWindowLongPtr を呼び出さないでください。 代わりに、SetParent 関数を使用します。

ウィンドウに CS_CLASSDC または CS_PARENTDCのクラス スタイルがある場合は、拡張ウィンドウ スタイルを WS_EX_COMPOSITED または WS_EX_LAYEREDに設定しないでください。

SetWindowLongPtr 呼び出して進行状況バーのスタイルを設定すると、その位置がリセットされます。

手記

winuser.h ヘッダーは、Unicode プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択するエイリアスとして SetWindowLongPtr を定義します。 エンコードに依存しないエイリアスをエンコードに依存しないコードと組み合わせて使用すると、コンパイルエラーやランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「関数プロトタイプの 規則」を参照してください。

必要条件

要件 価値
サポートされる最小クライアント Windows 2000 Professional [デスクトップ アプリのみ]
サポートされる最小サーバー Windows 2000 Server [デスクトップ アプリのみ]
ターゲット プラットフォーム の ウィンドウズ
ヘッダー winuser.h (Windows.h を含む)
ライブラリ User32.lib
DLL User32.dll
API セットの ext-ms-win-ntuser-windowclass-l1-1-0 (Windows 8 で導入)

関連項目

CallWindowProc の

概念

GetWindowLongPtr の

リファレンス

RegisterClassEx の

SetParent を する

WNDCLASSEX の

ウィンドウ クラス

WindowProc