「最小限の表示」モードでは、特定のポイントを超えてサイズを変更したくないため、最小の高さを設定したフォームがあります。WM_SIZEメッセージからフォームサイズを変更する
ユーザーがAeroでウィンドウを最大化しようとすると、ウィンドウが最大化されますが、ウィンドウの高さは240ピクセル(設定最大サイズ)にすぎません。 wParam
がSIZE_MAXIMIZED
のときにWM_SIZE
メッセージを処理しようとすると、フォームの高さを設定しようとする試みがバイパスされます。
現在、最大化ボタンが押されたときを検出するためにSC_MAXIMIZE
を処理しています。ユーザがタイトルバーをダブルクリックするとウィンドウが最大になるようにを処理しています。この両方の状況では、拡張ウィンドウモードを切り替えることができ、フルスクリーンになるように最小サイズを設定できます。
もちろん、ウィンドウが最大化されている場合は、ShowWindow(SW_MAXIMIZE)
または画面の上部に空白が表示されても、どちらのメッセージも表示されません。
システムが実際に最大化を行う直前に発生するかもしれない別のメッセージがありますので、手作業でウィンドウサイズと表示モードを調整できますか?
現在のコード:最大ウィンドウサイズは、フルスクリーンを許可するように設定されているため、ウィンドウがWM_SIZEが送信される最大限の拡張表示モードですでにある場合
protected override void WndProc(ref Message m)
{
if (m.Msg == 0x0112) { // WM_SYSCOMMAND
if (m.WParam == new IntPtr(0xF030)) { // Maximize event - SC_MAXIMIZE from Winuser.h
// The window is being maximized
this.MaximumSize = new Size(9999, 9999);
ToggleDeviceDisplay(true);
linkToggleDeviceList.Visible = false;
}
} else if (m.Msg == 0x00A3) { // WM_NCLBUTTONDBLCLK - Double clicking on window title bar, min or max
if (this.WindowState == FormWindowState.Normal) {
if (grpDeviceList.Visible == false) {
this.MaximumSize = new Size(9999, 9999);
ToggleDeviceDisplay(true);
}
this.WindowState = FormWindowState.Maximized;
linkToggleDeviceList.Visible = false;
} else {
this.WindowState = FormWindowState.Normal;
linkToggleDeviceList.Visible = true;
}
return;
} else if (m.Msg == 0x0005) { // WM_SIZE
if (m.WParam == new IntPtr(0x02)) { // SIZE_MAXIMIZED
// CANT GET WINDOW TO GO TO FULL-SCREEN FROM HERE
this.MaximumSize = new Size(9999, 9999);
// THE LINE BELOW DOESN'T WORK, probably because it is already being sized
this.Height = Screen.FromHandle(this.Handle).WorkingArea.Size.Height;
} else if (m.WParam == new IntPtr(0x00)) { // SIZE_RESTORED
linkToggleDeviceList.Visible = true;
}
}
base.WndProc(ref m);
}
は、場合、しかし、問題はありません彼らは最小限のモードから最大化しようとすると、私はメッセージ中にフルスクリーンを取るために切り替えるには、アプリケーションを取得することはできません。
私は、メッセージから実行するタイマーや何かを起動させることができるので、すぐにフルスクリーンではないことにユーザーが気付かないほどにサイズを変更することができますが、それはひどいハックです。
EDIT:
2つのウィンドウ状態を説明するために、私は2つのスクリーンショットhereをアップロードしています。上の画像はウィンドウのサイズに制限のない拡張ディスプレイを示し、下の画像はウィンドウの高さを上げることができないように高さ制限が設定された最小表示を示します。スペース。
ありがとうございました。
なぜ16進値の代わりにWM_SIZEのような実際のウィンドウメッセージ定数値を使用していませんか? – kprobst
いいえ、最初は2つのメッセージしか使用していなかったので、私は自分のアプリでそれらを定数として定義する代わりに値を使用しました。 – drew010
Windowsの観点から、「ウィンドウの高さは、ユーザーがそれを大きくしたい場合を除いてYピクセルを超えてはならず、大きくなる」という概念は愚かです。ウィンドウの高さがYピクセルに制限されているか、またはウィンドウの高さがYピクセルに制限されています。あなたはそれを両方向に持つことはできません。 – hvd