3

私は現在、プレイグラウンド SDK を使用しており、ゲーム ウィンドウの WNDCLASS を取得する必要があります。SDK で何も見つかりませんでした。そのため、ゲーム ウィンドウの hWnd でこれを実行しようとしています。HWND から WNDCLASS を取得する方法はありますか? ゲームウィンドウのシステムカーソルを変更するためにこれが必要です

4

1 に答える 1

6

問題の SDK についてはわかりませんが、ネイティブ型へのアクセスを提供する限り、HWNDネイティブ呼び出しを使用できます。


そのクラスのすべてのウィンドウのカーソルを変更するには:

SetClassLongPtr関数を使用します。

SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));

ゲーム ウィンドウだけのカーソルを変更するには:

まず第一にWM_SETCURSOR、ウィンドウに表示されるカーソルを制御するために処理できるメッセージがあります。詳細については、以下の Adam Rosenfield のコメントを参照してください。

それはさておき、代替手段があります。SetCursorドキュメントに従って、最初にクラスのカーソルが何も設定されていないことを確認してください(NULL)。次にSetCursor、マウスがクライアント領域に出入りするときに関数を使用できます。クラス内の他のウィンドウに干渉しないようにするには、マウス入力時にクラス カーソルを NULL に設定し、マウス終了時に元の状態に戻してください。

otherCursor = SetCursor(otherCursor);

ウィンドウに関連付けられた読み取り専用の WNDCLASSEX を取得するには:

まず、GetClassNameウィンドウに関連付けられたクラスの名前を取得するために使用します。

std::array<TCHAR, 256> className; //256 is max classname length
GetClassName(hwnd, className.data(), className.size());

次に、それを の呼び出しで使用しますGetClassInfoEx

WNDCLASSEX wce;
GetClassInfoEx(GetModuleHandle(nullptr), className.data(), &wce);

wceこれで、アクセスしてクラス構造の内容を読み取ることができます。必要に応じて、とをstd::arrayおよびstd::vector.data()置き換えることができます。の代わりにそれが必要な場合はa を返します。&className[0]nullptrNULLGetClassInfoWNDCLASSWNDCLASSEX

于 2012-11-13T21:50:19.627 に答える