繁体   English   中英

为XP和Vista / Windows 7创建Win32应用程序

[英]Creating a Win32 application for both XP and Vista/Windows 7

我已经使用纯Win32 API(没有MFC或WPF)在C ++中编写了一个应用程序。 我希望在Windows XP和Windows Vista / Windows 7下都可以运行相同的.exe。

我正在使用清单将视觉样式添加到应用程序中的控件。 但是,当我在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>

问题出在清单上还是其他原因?

确保调用InitCommonControlsEx

这是另一回事。 假设它们是普通的标准按钮,则无论清单是什么样还是不存在,都应该显示它们。 发生了其他事情。

除非您使用新的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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM