プラットフォーム SDK
SetClassLong
指定されたウィンドウが属するウィンドウクラスの拡張クラスメモリ内の指定されたオフセット位置にある long データ(32 ビット値)か、または 構造体の中の指定された long データを指定された値に書き換えます。
注 この関数に代わる関数として、SetClassLongPtr 関数があります。32 ビット Windows と 16 ビット Windows の両方と互換性のあるコードを記述するには、SetClassLongPtr 関数を使ってください。
DWORD SetClassLong(
HWND hWnd, // ウィンドウのハンドル
int nIndex, // 変更する値のインデックス
LONG dwNewLong // 新しい値
);
パラメータ
- hWnd
- ウィンドウのハンドルを指定します。クラスも間接的に指定したことになります(指定したウィンドウの属するクラスが使われます)。
- nIndex
- 値を書き換える 32 ビット値を指定します。拡張クラスメモリ内の 32 ビット値を書き換えるときは、0 から始まるオフセットをバイト単位で指定します。有効な値は、0 から拡張クラスメモリのバイト数より 4 小さい値までです。たとえば、12 バイト以上の拡張クラスメモリを持つクラスを指定した場合なら、8 を指定すると、3 番目の 32 ビット値が書き換えられます。拡張クラスメモリ以外のデータを書き換えるときは、次の値のいずれかを指定します。
| 値 | 動作 |
| GCL_CBCLSEXTRA | クラスに関連付けられている拡張クラスメモリのサイズを、バイト単位で設定します。この値を変更しても、すでに割り当てられた拡張メモリのサイズは変わりません。 |
| GCL_CBWNDEXTRA | ウィンドウに関連付けられている拡張ウィンドウメモリのサイズを、バイト単位で設定します。この値を変更しても、すでに割り当てられた拡張ウィンドウメモリのサイズは変わりません。このメモリへのアクセス方法については、SetWindowLong 関数の説明を参照してください。 |
| GCL_HBRBACKGROUND | クラスに関連付けられている背景ブラシのハンドルを書き換えます。 |
| GCL_HCURSOR | クラスに関連付けられているマウスカーソルのハンドルを書き換えます。 |
| GCL_HICON | クラスに関連付けられているアイコンのハンドルを書き換えます。 |
| GCL_HICONSM | クラスに関連付けられている小さいアイコンのハンドルを書き換えます。 |
| GCL_HMODULE | クラスを登録したモジュールのハンドルを書き換えます。 |
| GCL_MENUNAME | メニュー名が入った文字列のアドレスを書き換えます。この文字列は、クラスに関連付けられているメニューリソースを識別します。 |
| GCL_STYLE | ウィンドウクラスのスタイルビットを書き換えます。 |
| GCL_WNDPROC | クラスに関連付けられているウィンドウプロシージャのアドレスを書き換えます。 |
- dwNewLong
- 新しく設定する値を 32 ビット値で指定します。
戻り値
関数が成功すると、変更前の値が返ります。値が設定されていなかった場合は、0 が返ります。
関数が失敗すると、0 が返ります。拡張エラー情報を取得するには、 関数を使います。
解説
SetClassLong 関数と GCL_WNDPROC インデックスを使用してウィンドウプロシージャを置き換える場合、ウィンドウプロシージャは、WindowProc コールバック関数の説明に示した指針に従っていなければなりません。
GCL_WNDPROC インデックスを指定して SetClassLong 関数を呼び出すと、ウィンドウクラスのサブクラスが作成され、以降にこのクラスを使用して作成したすべてのウィンドウにそれが適用されます。アプリケーションでシステムクラスをサブクラス化してもかまいませんが、ほかのプロセスで作成されたウィンドウクラスはサブクラス化しないでください。
拡張クラスメモリを確保するには、RegisterClassEx 関数に渡す 構造体の cbClsExtra メンバに 0 以外の値を設定します。
SetClassLong 関数は注意して使用してください。たとえば、この関数を使用してクラスの背景色を変更することは可能ですが、これを行っても、クラスに属するすべてのウィンドウがすぐに再描画されるわけではありません。
対応情報
Windows NT/2000:Windows NT 3.1 以降
Windows 95/98:Windows 95 以降
ヘッダー:Winuser.h で宣言、Windows.h をインクルード
インポートライブラリ:User32.lib を使用
Unicode:Windows NT/2000 は Unicode 版と ANSI 版を実装
参照
GetClassLong, RegisterClassEx, SetClassLongPtr, SetWindowLong, WindowProc,