1

Windows ダイアログの UI 要素 (ボタンなど) の外観に影響を与える要因について、少し混乱しています。私の混乱は、次の観察から現れます。

1- システムに Visual Studio 2010 がインストールされており、MFC ダイアログを作成すると、.rc のボタンが洗練された外観になり、角が少し丸くなります。MFC アプリケーションをビルドすると、結果の exe に同じ外観が表示されます。 vs win7 での 2010 プロジェクト

2- VC 6 で開発されたアプリケーションを取得し、それを新しい vs 2010 プロジェクトに変換します。.rc ファイルを開くと、UI の外観は上記と同じです。

変換されたプロジェクトの rc ファイル

しかし、アプリをビルドして実行すると、ボタンのUIの外観は古く、洗練されていません。 変換されたプロジェクトの実行中のexeを見てください

3- 古いコードに InitcommonControlEx() を含めましたが、何も変更されていません。おそらくこれとは関係ありません。

私の質問は、UI 要素のこのルック アンド フィールを制御しているのは何ですか? アプリケーションが使用するWindowsライブラリのバージョンを指示するマニフェストファイルと関係がありますか?

もしそうなら、古いプロジェクトのマニフェスト ファイルを更新して、新しい UI のルック アンド フィールを得るにはどうすればよいですか?

4

3 に答える 3

1

#ifdef _UNICODE ステートメントを削除したくない場合は、次の行をコピーするだけです。

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")

stdafx.h ファイルの最後に配置します。これは、上記の「cha」が推奨する手順とまったく同じことを行いますが、手順は少なくなります。

于 2013-05-22T00:27:42.993 に答える
1

VS2010 では、New Project ウィザードを使用して MFC ダイアログ アプリケーションを作成します (実際には、どの MFC アプリケーションでも構いません)。すべてのオプションのデフォルトを選択し、ウィザードにコードを生成させます。

完了したら、ファイルを調べてstdafx.h、次のブロックをコピーしてに貼り付けますstdafx.h

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='ia64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

Project/Properties からも実行できますが、コード内で実行することで、他のプロジェクトとソースを共有しても壊れません。

#ifdef _UNICODE少数の一般的なコントロールは UNICODE ビルドでのみ正しく機能するため、そこにがあることに注意してください。#ifdefただし、非 UNICODE ビルドが必要で、「標準」の Windows コントロールのみを使用している場合 (たとえば、リスト ビューやツリー ビューなどを使用していない場合)、.

于 2013-04-15T04:49:51.517 に答える
1

あなたが正しいです。マニフェスト ファイルを埋め込む必要があります。

VS2010でマニフェストを MFC アプリケーションに埋め込む適切な方法は、[プロパティ] -> [リンカー] -> [マニフェスト ファイル] -> [マニフェストの生成] を使用することです。XP テーマを有効にするには、Additional Manifest Dependenciesフィールドで次を使用します。

type='Win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='X86' publicKeyToken='6595b64144ccf1df' language='*'
于 2013-04-15T02:33:30.393 に答える