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 コールバック関数の説明で指定されたガイドラインに準拠している必要があります。

SetWindowLongDWL_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 を呼び出して進行状況バーのスタイルを設定すると、その位置がリセットされます。

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

注意

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

要件

   
サポートされている最小のクライアント 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で導入)

こちらもご覧ください

CallWindowProc

概念

GetWindowLong

リファレンス

RegisterClassEx

SetParent

SetWindowLongPtr

WNDCLASSEX

ウィンドウ クラス

WindowProc