SetWindowLongPtrA 関数 (winuser.h)
指定したウィンドウの属性を変更します。 関数は、余分なウィンドウ メモリ内の指定されたオフセットに値を設定します。
構文
LONG_PTR SetWindowLongPtrA(
[in] HWND hWnd,
[in] int nIndex,
[in] LONG_PTR dwNewLong
);
パラメーター
[in] hWnd
型: HWND
ウィンドウへのハンドルと、ウィンドウが属するクラスを間接的に指定します。 hWnd パラメーターで指定されたウィンドウを所有するプロセスが、呼び出し元スレッドが存在するプロセスよりも UIPI 階層のプロセス特権が高い場合、SetWindowLongPtr 関数は失敗します。
Windows XP/2000: hWnd パラメーターで指定されたウィンドウが呼び出し元のスレッドと同じプロセスに属していない場合、SetWindowLongPtr 関数は失敗します。
[in] nIndex
型: int
設定する値への 0 から始まるオフセット。 有効な値は、余分なウィンドウ メモリのバイト数からLONG_PTRのサイズを差し引いた範囲の 0 です。 その他の値を設定するには、次のいずれかの値を指定します。
値 | 意味 |
---|---|
|
新しい 拡張ウィンドウ スタイルを設定します。 |
|
新しいアプリケーション インスタンス ハンドルを設定します。 |
|
子ウィンドウの新しい識別子を設定します。 ウィンドウを最上位のウィンドウにすることはできません。 |
|
新しい ウィンドウ スタイルを設定します。 |
|
ウィンドウに関連付けられているユーザー データを設定します。 このデータは、ウィンドウを作成したアプリケーションで使用するためのものです。 その値は、最初は 0 です。 |
|
ウィンドウ プロシージャの新しいアドレスを設定します。 |
hWnd パラメーターがダイアログ ボックスを識別する場合は、次の値も使用できます。
[in] dwNewLong
種類: LONG_PTR
置換値。
戻り値
種類: LONG_PTR
関数が成功した場合、戻り値は指定されたオフセットの前の値になります。
関数が失敗した場合は、0 を返します。 詳細なエラー情報を得るには、GetLastError を呼び出します。
前の値が 0 で、関数が成功した場合、戻り値は 0 ですが、関数は最後のエラー情報をクリアしません。 成功または失敗を判断するには、 SetLastError を 0 で呼び出して最後のエラー情報をクリアしてから、 SetWindowLongPtr を呼び出します。 関数の失敗は、戻り値が 0 で、 GetLastError の結果が 0 以外で示されます。
解説
特定のウィンドウ データがキャッシュされるため、 SetWindowLongPtr を 使用して行った変更は 、SetWindowPos 関数を呼び出すまで有効になりません。
SetWindowLongPtr を GWLP_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 ヘッダーは、SetWindowLongPtr をエイリアスとして定義し、UNICODE プリプロセッサ定数の定義に基づいて、この関数の ANSI または Unicode バージョンを自動的に選択します。 encoding-neutral エイリアスの使用を encoding-neutral ではないコードと混在すると、コンパイル エラーまたはランタイム エラーが発生する不一致が発生する可能性があります。 詳細については、「 関数プロトタイプの規則」を参照してください。
要件
サポートされている最小のクライアント | Windows 2000 Professional [デスクトップ アプリのみ] |
サポートされている最小のサーバー | Windows 2000 Server [デスクトップ アプリのみ] |
対象プラットフォーム | Windows |
ヘッダー | winuser.h (Windows.h を含む) |
Library | User32.lib |
[DLL] | User32.dll |
API セット | ext-ms-win-ntuser-windowclass-l1-1-0 (Windows 8 で導入) |
関連項目
概念
参照