システム全体のテーマを変更せずに、カスタムビジュアルスタイル(.msstyle)をWindowsフォームアプリケーションに適用する方法はありますか?基本的に、コントロールパネルで何が設定されているかに関係なく、アプリケーションで同じテーマを維持する必要があります。これが良い考えだと思うかどうか教えてはいけません。一連のネイティブAPI呼び出しのように、プロプライエタリライブラリを使用せずにこれを行う方法があるかどうか疑問に思っています。ありがとう!
2 に答える
SetWindowTheme
関数はあなたが探している解決策のように見えます。使用するには、P/Invokeを実行する必要があります。
悲しいことに、これには単純なP / Invokeだけでなく、多くのフックが必要です。
マネージコードを使用して新しいコントロールをオーバーライド/作成する方が、おそらく高速で優れています。それ以外の場合は、ネイティブDLLを使用してテーマ呼び出しをフックする必要があり、実行には細心の注意を払う必要があります。
実際、私はそれを自分で正確に実装する方法を知りません、私は恐れています。その時はもっと役立つ答えを出したでしょう。これらすべてをうまくサポートしているStyleSoftの「VisualStyler」(2014年以来会社は死んでいるようです)と呼ばれる現在は廃止されたツールのコードを調べると、全体の進歩は非常に複雑に見えます。
さらに、本当にuxthemeを使用することにした場合は、Windowsテーマエンジンが提供するものにとらわれ、視覚的なスタイルのファイル形式とヒックアップに限定されます(最近は優れたエディターもありますか?)。
マイクロソフトがXP用のテーマエンジンを作成したときに頭を使って釘を打ち、アプリケーション開発者がそれを自分のアプリケーションIDに利用できるようにしたいと思います。しかし、テーマ/ Windows製品のアイデンティティに関してはそうは思われません(別の例は、DWMが3D変換機能を公開しないことですが、アプリケーションがそのようなものを悪用することによって異常なことをするのを防ぐのはおそらく良い考えです)。
オプション?
- マネージコードで独自のコントロールを作成し、自分で描画を処理します。
- Win32アプリケーション用の製品を購入してください。
- アプリケーションテーマを作成するための最新かつ適切な方法を提供するWPFの使用を開始します。