2011-09-14 11 views
0

純粋なwin32 API(MFCまたはWPFなし)を使用してC++でアプリケーションを作成しました。 WindowsのXPとWindows Vista/Windows 7の両方で同じ.exeが実行されます。XPとVista/Windows 7用のWin32アプリケーションの作成

私のマニフェストを使用して、アプリケーションのコントロールにビジュアルスタイルを追加していました。しかし、XPマシンでアプリをテストしたところ、ボタンは表示されません。編集コントロールとメニューバーのみが行います。

編集:私はこれを言い忘れたと思うが、アプリケーションはWIndows 7/Vista上で正常に動作する。 編集2:私はMinGWコンパイラを使用しています これはマニフェストの問題だと思ったので、削除してプログラムを再コンパイルしました。しかし、ボタンはまだ表示されません。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
<assemblyIdentity 
    version="1.0.0.0" 
    processorArchitecture="*" 
    name="BlackJack.Viraj" 
    type="win32" 
/> 
<description>Your application description here.</description> 
<dependency> 
    <dependentAssembly> 
     <assemblyIdentity 
      type="win32" 
      name="Microsoft.Windows.Common-Controls" 
      version="6.0.2600.0" 
      processorArchitecture="*" 
      publicKeyToken="6595b64144ccf1df" 
      language="*" 
     /> 
    </dependentAssembly> 
</dependency> 
</assembly> 

がマニフェストに問題が嘘をいたり、それが何か他のものである:次のように私が使用しています マニフェストはありますか?

+0

UACシールド付きの新しいボタンスタイルを使用しましたか?私はXPが未知のフラグを無視するのか、それとも未知のボタンなのか分かりません。 – RedX

+0

いいえ、それはすべて普通のボタンです。 – viraj

+0

ボタン作成のコードを投稿できますか? – RedX

答えて

3

あなたは新しいWindows 7 APIを使用している場合を除き、あなたがInitCommonControlsEx

+0

もしマニフェストを持っていなくても問題が残っていれば、これは助けになるとは思っていません。私が知っている限り、Win32で単純なボタンを作成する必要はありません。 (これは呼び出すには良い関数ではありません!) –

+0

InitCommonControlsExはマニフェストとは関係ありません。それは単に一般的なコントロールのDLLがロードされていることを確認します –

+0

ええ、私は知っている - 私はそれを見上げた。しかし、ボタンは共通のコントロールDLLの存在を前にしています...マニフェストさえなければこのAPIコールが必要になるのは驚きです! –

1

これは別のものです。それらが標準の標準ボタンであると仮定すると、マニフェストがどのように見えるか、またはマニフェストがあるかどうかにかかわらず表示する必要があります。他に何かが起こっている。

0

マニフェストは問題ありません。したがって、問題はあなたのコード内になければなりません。テーマのあるアプリケーションを作成することは、テーマ以外のものと全く同じではありません。

1

を呼び出していることを確認し、標準アプリケーションでは、両方のプラットフォームによく行きます。また、Windows 7には、何か壊れたものが見つかった場合に試用する互換モードがあります。

プログラムの最初にInitCommonControls APIを呼び出したことはありますか?

はそれが重要である理由を参照してください - http://blogs.msdn.com/b/oldnewthing/archive/2005/07/18/439939.aspx

が、私はまた、私は、それ自体がソースファイル内のリンカオプションの中にマニフェストを置くことをお勧めしたい、純粋なWin32アプリケーション http://blogs.msdn.com/b/oldnewthing/archive/2005/04/22/410773.aspx

を参照するためにあなたをお勧めしたいです。

#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 
+0

'#pragma comment'はVisual C-ismなので、Mingwとはうまく動作しません。 –

関連する問題