Office 2007 スタイルで MFC 機能パックを使用するときに使用されている色を確認する
-
08-06-2019 - |
質問
Microsoft が Visual Studio 2008 用にリリースした「MFC 機能パック」を使用するために、従来の C++ コードの一部を更新しています。新しいクラスを使用して CFrameWndEx からアプリケーションを派生し、Office 2007 スタイルを適用してアプリケーションをよりモダンな外観にしています。これにより、グラデーションで塗りつぶされたウィンドウ タイトル、ステータス バーなどが提供され、リボン ツールバーが使用できるようになります。
ただし、アプリケーションにはオーナーが描画したコントロールがいくつか含まれているため、機能パックで使用される配色と一致するようにこれらを更新したいと考えています。理想的には、現在使用されているツールバーの明るい色と影付きの色を知りたいと思っています。
ドキュメントや Web を探し回りましたが、まだ何も見つかりませんでした。この情報を見つける方法を知っている人はいますか?
[編集]
特に、実行時にどの色が使用されているかを確認する必要があります。新しい静的関数 CMFCVisualManager::SetDefaultManager を使用して、実行時にアプリケーションの外観を変更できます。
次の msdn ページには、使用できるスタイルの種類、特に Office2007 の外観が示されています。msdnへのリンク
解決
MFC ソース コードを調べたことがありますか。次のような場所にあります。
C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\src\mfc
他のヒント
CMFCVisualManager は色情報を取得するためのいくつかのメソッドを提供しているようです。
cmfcvisualmanager :: getsmartdockingbaseguidecolors()cmfcvisualmanager :: gettoolbarhighlightcolor()
CMFCVisualManager の MSDN ドキュメントを参照してください。
良い提案ですが、残念ながら、現在 CMFCVisualManagerOffice2007::Office2007_LunaBlue スタイルでアプリケーションを実行している場合、さまざまな灰色の色合いが返されるだけです。
迷惑なことに、msdn ヘルプは「作成中」であるため、何をすべきかさえ説明されていません。
afxGlobalData
MFC 機能パックで使用されている現在の色、ブラシ、フォントに関する役立つ情報が含まれています。特に私が使っているのは afxGlobalData.m_clrBarFace
自分のコントロール バーの背景をペイントするとき。
(私は職場の PC の前にいないので、上記の構文は正確ではないことに注意してください。)
お気に入りの画像エディタを使用して、画面キャプチャから色を選択することもできると思います。
「お気に入りの画像エディタを使用して、画面キャプチャから色を選択できると思います。」
これは基本的に私が現在行っていることであり、色を抽出するための定数のリストを定義しました。あまりエレガントには見えませんが!
CMFCVisualManager は色情報を取得するためのいくつかのメソッドを提供しているようです。
CMFCVisualManager::GetSmartDockingBaseGuideColors()
CMFCVisualManager::GetToolbarHighlightColor()
CMFCVisualManager の MSDN ドキュメントを参照してください。
@GateKiller、OP は Office 2007 アドインを開発していないため、UI ガイドラインはあまり役に立ちません。これは、を使用する MFC アプリケーションです。 Visual C++ 2008 機能パック これにより、MFC アプリは Office 2007 のルック アンド フィールを引き継ぐことができます。
良い提案ですが、残念ながら、現在 CMFCVisualManagerOffice2007::Office2007_LunaBlue スタイルでアプリケーションを実行している場合、さまざまな灰色の色合いが返されるだけです。
CMFCVisualManagerOffice2007::GetTabFrameColors - clrFace 出力パラメータはグレーですか?
おそらく、それらはすべて、各テーマの単一の基本色の上にマスクが重ねられたものなのでしょうか?CMFCVisualManagerOffice2007::GetStyle() を使用してどのカラー スキームが有効であるかを判断できると仮定すると、その色相が何であるかを把握し、GetxxxColor() メソッドでマスキングを実行できる可能性があります。