2011-09-14 39 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

,请务必让InitCommonControlsEx

+0

如果他甚至没有清单并且仍然存在问题,那么我认为这不会有帮助 - 据我所知,您不必在Win32中创建简单的按钮即可。 (不是说这不是一个好的函数!) –

+0

InitCommonControlsEx与清单无关。它只是确保常见控件DLL被加载 –

+0

是的,我知道 - 我查了它。但按钮早于公共控件DLL的存在......我很惊讶,如果甚至没有清单,这个API调用将是必需的! –

1

这是别的。假设它们是正常的标准按钮,它们应该显示出来,而不管清单看起来是什么样的,或者是否有一个。其他事情正在发生。

0

清单很好。因此,问题必须出现在您的代码中。创建主题应用程序与非主题应用程序并不完全相同。

1

除非你正在使用新的Windows 7 API,一个标准的应用程序将与这两个平台顺利。此外,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一起工作。 –

相关问题