DOBON.NET DOBON.NETプログラミング掲示板過去ログ

システムのメニューバーの色を変更するには

環境/言語:[XP/C#]
分類:[.NET]

こんにちは。

ウィンドウの色をカスタマイズしていたのですが、メニューバー(ファイル、編集ボタンがある部分)の色がクラシックモードじゃないと変更できません。

C#でSystemColors、SystemBrushなどのシステムの色に関係ありそうな部分を変更しようとしたのですが、読み取り専用でできませんでした。

どなたか解決方法をご存知でしたらご教授いただけると幸いです。
■No26440に返信(七篠さんの記事)
> ウィンドウの色をカスタマイズしていたのですが、メニューバー(ファイル、編集ボタンがある部分)の色がクラシックモードじゃないと変更できません。

意図を理解できているのか自信がありませんが、
 menuStrip1.BackColor = Color.DarkGreen;
 menuStrip1.ForeColor = Color.LightGreen;
とか
 menuStrip1.BackColor = SystemColors.ButtonFace;
 menuStrip1.ForeColor = SystemColors.ControlText;
で設定するのではなく、画面のプロパティで指定した色を利用したい、
と意味しょうか? もしそうであれば、
 menuStrip1.RenderMode = ToolStripRenderMode.System;
のように指定することができるかと思います。

あるいは、より細かく色を指定するために、
 ToolStripManager.Renderer = new ToolStripProfessionalRenderer(new Foo());

 menuStrip1.Renderer = new ToolStripProfessionalRenderer(new Foo());
を用いて、ProfessionalColorTable 継承クラス(上記 Foo)の中で、
色を変更したい箇所(MenuStripGradientBegin など)をオーバーライドするという
手法もあるかと。
http://dobon.net/vb/dotnet/control/tsrenderer.html
お返事ありがとうございます。

説明不足、申し訳ありません。

自分で作っているアプリのカスタマイズではなく、

デスクトップ右クリック→デザイン→詳細設定

で色の設定をしていて、XPスタイルだと設定できない部分があり、
C#でシステム情報を取得できるから逆に設定できないかと思い、
その結果質問内容のような状態に至ったということです。
■No26445に返信(七篠さんの記事)
> 自分で作っているアプリのカスタマイズではなく、
> デスクトップ右クリック→デザイン→詳細設定
> で色の設定をしていて、XPスタイルだと設定できない部分があり、

誰が作ったアプリであれ、.NET アプリの MenuStrip については、
先のようにして「システム設定とは別の色」を割り当てられるため、
そのようなアプリに対しては、特殊な事をしないと、それを外部から
設定する事はできないと思います。

http://msdn.microsoft.com/ja-jp/magazine/cc163617.aspx
http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/ManagedSpy.exe


そうではなく、システムカラー依存の標準的なアプリに対する話であれば、
SetSysColors API で、システム設定を一時的に変更できます。
http://msdn.microsoft.com/ja-jp/library/cc429942.aspx


> で色の設定をしていて、XPスタイルだと設定できない部分があり、

それとも、スタイルの切り替えやカスタマイズをしたいという話でしょうか?
お返事ありがとうございます。

SetSysColors!これでやりたいことを実現できそうです。
シャットダウン時に保存されないということなので、C#のフォームアプリで
設定ファイルをプレビューしながら作成できるようにし、それを読み込んで
SetSysColorsを呼び出す実行ファイルをスタートアップに設定すればよさそうです。

アドバイス、ありがとうございました!
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板