5

私の C# .NET 4 アプリケーションでは、WndProcいくつかのメッセージを処理するために使用していましたが、主にアプリケーションのフルスクリーンへのサイズ変更とフルスクリーンからのサイズ変更を扱っていました。

現在、ウィンドウが最大化された状態にサイズ変更されているか、最大化された状態からサイズ変更されているかを判断するだけですSC_MAXIMIZEWM_NCLBUTTONDBLCLKWndProcを処理する必要がないことはわかっていSC_MAXIMIZEますが、をダブルクリックしてもメッセージが表示Form_ResizeされないようですWM_NCLBUTTONDBLCLKアプリケーションのタイトル バー。

ウィンドウを画面の上部に Aero スナップして最大化すると、上記のメッセージのいずれも表示されないため、Aero Snap を使用してウィンドウを最大化すると、特定のロジックが適用されないことに気付きました。ウィンドウが右または左ではなく画面の上部にスナップされている場合、またはウィンドウが最大化された位置からスナップされていない場合にのみ、メッセージを処理したい。

Aero Snap に関連するウィンドウ メッセージが見つかりませんでした。これらのメッセージの参照を知っている人はいますか?

4

2 に答える 2

6

ここには特別なメッセージはないと思います。Aeroは、プレーンなWin32 API (ShowWindow(SW_MAXIMIZE)など)を使用している可能性があります。

SC_メッセージで理解できるのは、これらはウィンドウ自体のサイズ変更/復元などを要求するメニューからの要求ですが、ウィンドウのサイズを変更するためのメカニズムはそれだけではありません。おそらく起こっていることは、ウィンドウがSC_MAXIMIZEを取得すると、DefWndProcがShowWindow(SW_MAXIMIZE)を呼び出すことによってこれを実装することです。

最善の方法は、サイズ変更のトリガーに関係なく、ウィンドウが受信するWM_SIZEメッセージ(システムメニュー、API、またはその他の手段)を聞くことです。特に、lParamは、ウィンドウが最大化されたか(SIZE_MAXIMIZED)、復元されたか(SIZE_RESTORED)を通知します。

于 2012-02-17T02:25:50.560 に答える