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

Windowsのテーマを意識したコントロールの作成について

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

Windowsのテーマを意識したコントロールの作成について

こんにちは。アべです。

C#でWinForm系のアプリケーションを作成しております。
そこでコントロールを作成してアプリケーションを
作成しているのですが、そのコントロールの
Windowsテーマ対応について悩んでおります。

WindowsXPスタイルだとコントロールがフラット
スタイルになり、クラシックスタイルだと3D
スタイルになるコントロールを作成したのですが、

1.Windowsのテーマの取得方法がわからないので、
コントロール描画時にスタイルの切り替えが出来ない。

2.プログラム実行後にWindowsのテーマを変更されると
コントロールのスタイルを切り替えることが出来ない。

などの問題がでており、対応方法がわからずに困っております。

当方の環境は.NET Framework2.0ということでこの当りのAPIは
強力なものになったつもりですが、いまいちやり方が
わかっておりません。

すみませんが、ご存知の方アドバイスをお願い致します。

最悪、起動時にWindowsテーマ情報を拾えるだけでの
対応だけでも良いかと考えています。
(アプリ起動後のテーマ変更は無視する対応)

以上
.NET Framework2.0は触ったことないんですがやりたいことって

コントロールの外観をXPスタイルにする
http://dobon.net/vb/dotnet/control/xpstyle.html

ってこと?
2006/08/09(Wed) 15:16:07 編集(投稿者)

bellさん、回答有難うございます。

当方がやりたかったのは、OSがWindowsXPのスタイルなら、
この描画ロジックでコンポーネントを書き、
クラシックスタイルなら、この描画ロジックで
コンポーネントを書くようなロジックの切り分けです。

こちらではコンポーネントをドット単位に調整しながら
作成しており、見た目を合せるためにOSがどのテーマで
表示しているかを取りたかったのです。

具体的には、

  [    |▽]
       ~~~~~
見たいな業務コード(顧客コードなど)を入力する
コンポーネントを作りたかったのですが、~~~の部分が
周りのコンボボックスやDateTimePickerのように
OSのテーマに応じて絵を変えたかったのです。

(XPスタイルではフラットなイメージで、クラシックでは、
 3Dなイメージで表示)

やり方がわからないということで、XPスタイルでも
クラシックスタイルでも違和感の無いような画像を
使って実現したいと思います。

有難うございました。
解決済み!
■No17068に返信(kiyo7447さんの記事)
> 当方がやりたかったのは、OSがWindowsXPのスタイルなら、この描画ロジックでコンポーネントを書き、
> クラシックスタイルなら、この描画ロジックでコンポーネントを書くようなロジックの切り分けです。

視覚テーマが有効かどうかは、uxtheme.dll の IsAppThemed 関数で識別可能かと思います。

> こちらではコンポーネントをドット単位に調整しながら作成しており、見た目を合せるためにOSがどのテーマで
> 表示しているかを取りたかったのです。
> (snip)
> OSのテーマに応じて絵を変えたかったのです。

視覚テーマによってマージンが変わることが多いに予想されるので、識別する意味はないでしょうね。
Windows XP の標準は Luna という MSSTYLES ですが、このテーマが使用されているとは限りません。
解決済み!
ご指摘のDLLを使用し、実現できました。有難うございました。

補足ですが、こちらでは、
WindowsXP(True/False)、Windos2003Server(Flase)、Windows2000(False)で
動作することを確認できました。

有難うございました。
以上
> WindowsXP(True/False)、Windos2003Server(Flase)、Windows2000(False)で

Themes サービスを起動すれば、Windows 2003 Server も Windows XP と同じ結果になるはずです。

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