2012-02-08 22 views
3

私は純粋なWINAPIを使用しており、TB_GETMETRICSメッセージを送信する必要があります。ただし、このメッセージは、Common Controlsバージョン6.0への参照を使用してアプリケーションにマニフェストファイルを追加した場合にのみ機能します。私はそれを付け加えました、メッセージは機能していますが、私のアプリケーションはVista/Windows 7のビジュアルスタイルを使用しています。Common Controls機能を維持したままマニフェストでビジュアルスタイルを無効にする

クラシックテーマを使用しているときにマニフェストファイルを変更するか、またはいくつかのAPI関数を呼び出して、Common Controls 6.0の参照を保持する方法はありますか?

注:SetWindowThemeを試しましたが、結果はClassicとAeroが混在していました。

EDIT:私はSetWindowTheme関数を正しく読み込んでいなかったので、親hWndを呼び出すと、自動的にすべての子に対して呼び出されると考えていました。それは私がWindowsクラシックを使用したい各コントロールのためにそれを呼び出す必要があることがわかります。今のように動作しています。

答えて

2

すべてのコントロールのビジュアルスタイルを無効にするには、メインウィンドウを作成する前にSetThemeAppProperties(STAP_ALLOW_NONCLIENT)またはSetThemeAppProperties(0)を呼び出します。あなたはV6のコモンコントロールせずにシステムをサポートする必要がある場合、あなたはおそらくメトリック(またはハードコードされた値)と一緒に遊んで、ツールバーコントロールで使用されているシステムを見つけ出すことができますSetWindowTheme(hwndControl,L"",L"")

を呼び出すことができますHWNDあたりの視覚的なスタイルを無効にするには

システムのメトリック値とシステムDPI。

+0

驚くべきことに、メインウィンドウにテーマを使用させることができますが、コントロールはしません。マニフェストファイルを追加する前とまったく同じです。これは私が望んだものです。 – stelonix

1

適切SetWindowTheme(パラメータとしてL「」と)を使用することによって解決:私がしなければならなかったすべては一人ひとり自分のアプリケーションが作成制御のためにそれを呼んでいました。それはハックを感じるが、仕事を終わらせる。

関連する問題