1

ウィンドウから境界線とキャプションを削除し、サイズをユーザーの解像度に設定して中央に配置する小さなアプリを C# で作成しました。境界線に煩わされることなく、ウィンドウ モードでゲームをプレイしたいときに使用するユーティリティです。ほとんどのゲームですべて正常に動作しますが、最近リリースされたゲーム Alpha Protocol で使用しようとしましたが、動作しません。ゲームが私の変更を元に戻すと言っても過言ではありませんが、それが本当かどうかはわかりません. インポートされた API 関数 MoveWindow、SetWindowLong、および SetWindowPos を使用しています。

スニペット:

Win32.MoveWindow(hWnd, 0, 0, Convert.ToInt32(sizeXText.Text), Convert.ToInt32(sizeYText.Text), true);
Win32.SetWindowLong(hWnd, GWL_STYLE, Win32.GetWindowLong(hWnd, GWL_STYLE) & ~WS_CAPTION & ~WS_BORDER);
Win32.SetWindowPos(hWnd, 0, 0, 0, 0, SWP_NOZORDER|SWP_NOMOVE|SWP_NOSIZE|SWP_NOACTIVATE|SWP_DRAWFRAME);
4

2 に答える 2

1

SetWindowPos が呼び出されるたびに、次のメッセージが送信されます: WM_WINDOWPOSCHANGINGSetWindowPos パラメータの書き込み可能なコピーをウィンドウに送信します。これにより、ウィンドウはパラメータを検証および変更できます。多くのウィンドウは、再配置とサイズ変更に自動的に反応して、クライアント以外の装飾を「スマートに」管理します。これがここで起こっていることだと思います。OnWindowPosChanging コードは、DRAWFRAME が処理される直前に非クライアント デコレーションを再設定しています。

于 2010-05-31T10:06:46.790 に答える
0

ゲームのウィンドウ構造を調査するには、Spy++ を使用する必要があります。

于 2010-05-30T23:21:22.017 に答える