トップ回答者
タスクバーの裏にフォームを表示するには?

質問
-
VS2012 windows 7 x64 エアロ環境有り で作業しています。
この際にC#フォーム(x64)をモニタと同じ解像度で作成した場合、フォームがタスクバーの上に表示されてしまい、
タスクバーが隠れてしまいます。
他のウィンドウがアクティブになるとタスクバーが上面に出てくる為、タスクバーが表示されたり消えたりし、非常に見づらい状態となっています。
これを解決する方法はないでしょうか?
やりたいこと:モニタと同じ解像度で、最大化ではない状態の際に、フォームの上にタスクバーを出したい
引用開始
// Program Manager のハンドルを取得する System.IntPtr hProgramManagerHandle = FindWindow(null, "Program Manager"); // 正しく取得できた場合は、Program Manager を親ウィンドウに設定する if (! hProgramManagerHandle.Equals(System.IntPtr.Zero)) { SetParent(this.Handle, hProgramManagerHandle); }
引用終了
上記のソースコードのようなサンプルがネット上にいくつか存在し、実際にタスクバーの背面に表示されますが
プログラムマネージャーの子になった影響下、タスクバーからフォームが消えてしまい、選択することができなくなりました。
よろしくお願いします。
回答
-
Windows 7からタスクバーは常に表示する仕様になったぽいですね。
(参考)
タスクバーを「他の窓の手前に表示しない」ことはできないのでしょうか。
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-desktop/%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90%E3%83%BC/b851c34e-f4f0-4b0a-9c1d-22606205b099で、解決策をネットで探していると、やはり、FormBorderStyleを変更して対応しているようです。
あと、たまたま私がテストしてみたのですが、1ピクセルでもサイズを小さくすると、私の環境ではタスクバーが隠れなくなりました。
つまり、1920 x 1080の解像度に対して、フォームのサイズを1919 x 1080にするとタスクバーが現れました。完璧な対処療法ですが・・・★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
すべての返信
-
少し調べてみました。Form.FormBorderStyle プロパティが以下の場合、Formがタスクバーの前面に表示されることが判りました。
FixedSingle
上記以外に設定したタスクバーの背後に表示されます。これ、どうやら仕様のようですね。
Fixed3D
FixedDialog
試してませんがプログラムマネージャーの子にした上で Form.ShowInTaskbar を True にしてみてはいかがでしょうか?でもプログラムマネージャーの子になった場合は駄目そうな予感が。
MSDNフォーラムのヘルプは以下ご覧ください http://social.technet.microsoft.com/wiki/contents/articles/7359.forums-help-faq.aspx
- 編集済み ひらぽんModerator 2014年12月10日 2:58 語句の追加
- 回答の候補に設定 星 睦美 2014年12月11日 7:59
-
Windows 7からタスクバーは常に表示する仕様になったぽいですね。
(参考)
タスクバーを「他の窓の手前に表示しない」ことはできないのでしょうか。
http://answers.microsoft.com/ja-jp/windows/forum/windows_7-desktop/%E3%82%BF%E3%82%B9%E3%82%AF%E3%83%90%E3%83%BC/b851c34e-f4f0-4b0a-9c1d-22606205b099で、解決策をネットで探していると、やはり、FormBorderStyleを変更して対応しているようです。
あと、たまたま私がテストしてみたのですが、1ピクセルでもサイズを小さくすると、私の環境ではタスクバーが隠れなくなりました。
つまり、1920 x 1080の解像度に対して、フォームのサイズを1919 x 1080にするとタスクバーが現れました。完璧な対処療法ですが・・・★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
参考までに。
http://msdn.microsoft.com/ja-jp/library/cc144179(v=vs.85).aspxSetWindowPos を使用して、ウィンドウの四角形のサイズを画面と同じサイズに明示的に設定することによって、タスク バーを覆い隠すこともできます。Windows 2000 以降のシステムでは、ウィンドウは WS_CAPTION または WS_THICKFRAME が設定されていない必要があります。あるいは、クライアント領域が画面全体を覆うようにウィンドウのサイズを変更する必要があります。
WS_THICKFRAME はサイズ変更が可能なウィンドウの枠を持つかどうかのウィンドウスタイルなので、Fixed 系に設定している場合はこのウィンドウスタイルを持ちません。つまり、上記の条件を満たす=仕様通りということになります。
(日本語がわかりづらいですが、”「ウィンドウがタイトルバーを持っていない」か、「ウィンドウがサイズ固定である」のいずれかを満たし、かつウィンドウサイズが画面と同じサイズであればタスクバーは後ろに回る” ということです)- 編集済み AzuleanMVP, Moderator 2014年12月11日 22:03