次の方法で共有


SetWindowLongA 関数 (winuser.h)

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

この関数は、SetWindowLongPtr 関数に置き換わりました。 32 ビットバージョンと 64 ビット バージョンの両方の Windows と互換性のあるコードを記述するには、SetWindowLongPtr 関数を使用します。
 

構文

LONG SetWindowLongA(
  [in] HWND hWnd,
  [in] int  nIndex,
  [in] LONG dwNewLong
);

パラメーター

[in] hWnd

型: HWND

ウィンドウへのハンドルと、ウィンドウが属するクラスを間接的に指定します。

[in] nIndex

型: int

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

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

ウィンドウが呼び出し元スレッドと同じプロセスに属していない場合は、この属性を変更できません。

 

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

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

[in] dwNewLong

型: long

置換値。

戻り値

型: long

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

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

指定した 32 ビット整数の前の値が 0 で、関数が成功した場合、戻り値は 0 ですが、関数は最後のエラー情報をクリアしません。 これにより、成功または失敗を判断することが困難になります。 これに対処するには、SetWindowLongを呼び出す前 SetLastError を 0 で呼び出して、最後のエラー情報 クリアする必要があります。 その後、関数の失敗は 0 の戻り値と、GetLastError 0 以外の結果で示されます。

備考

特定のウィンドウ データはキャッシュされるため、SetWindowLong を使用して行った変更は、SetWindowPos 関数を呼び出すまで有効になりません。 具体的には、いずれかのフレーム スタイルを変更する場合は、キャッシュが正しく更新されるように、SWP_FRAMECHANGED フラグ SetWindowPos を呼び出す必要があります。

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

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

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

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

子ウィンドウの親 変更するには、GWL_HWNDPARENT インデックスを使用して SetWindowLong を呼び出す必要があります。 代わりに、SetParent 関数を使用します。

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

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

例については、「Windowのサブクラス化」を参照してください。

手記

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

必要条件

要件 価値
サポートされる最小クライアント 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 の

概念

GetWindowLong の

リファレンス

RegisterClassEx の

SetParent を する

SetWindowLongPtr の

WNDCLASSEX の

ウィンドウ クラス

WindowProc