正常查看按钮与c ++ / win32

时间:2009-09-25 01:37:40

标签: c++ winapi

我正在尝试按钮,但它总是看起来像Windows 95平面按钮。如何让它看起来像vista风格?

    hWndEdit = CreateWindowA("button", "Test",
        WS_CHILD | WS_VISIBLE | BS_DEFPUSHBUTTON,
100, 20, 140, 20, hWnd, NULL, NULL, NULL);

我哪里错了? 感谢

4 个答案:

答案 0 :(得分:7)

它可以只看Vista中的Vista风格,请注意。您的应用程序还必须按照http://msdn.microsoft.com/en-us/library/aa289524(v=VS.71).aspx嵌入清单以启用视觉样式。

答案 1 :(得分:6)

在项目目录中创建名为“MyApp.exe.manifest”的文件(MyApp是您的应用程序名称)。然后使用您的收藏编辑器打开它并复制&过去的代码如下:

<?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="X86"    
    name="CompanyName.ProductName.YourApp"    
    type="win32"    
/>

<description>Your application description here.</description>    
<dependency>    
<dependentAssembly>    
        <assemblyIdentity    
            type="win32"    
            name="Microsoft.Windows.Common-Controls"    
            version="6.0.0.0"    
            processorArchitecture="X86"    
            publicKeyToken="6595b64144ccf1df"    
            language="*"    
        />    
    </dependentAssembly>    
</dependency>    
</assembly>

完成后,将此文件添加到Visual Studio项目中(右键单击项目图标并选择“添加” - &gt;“现有项目”。

将此清单文件添加到VS解决方案就足以启用XP主题。

希望这会有所帮助......

答案 2 :(得分:5)

您的构建环境是什么?如果是Visual Studio 2005或2008,则所有其他清单建议都不适用,因为VS8及以上版本已包含清单信息。

在这种情况下,添加清单依赖项的最简单方法是使用您添加到某个cpp或头文件的简单(特定于Microsoft的)编译器指令:

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

以这种方式包含清单可以避免弄乱c-runtime清单依赖项或弄乱UAC正常工作所需的设置。

答案 3 :(得分:3)

您需要为.exe添加一个清单,指明您要使用主题。默认行为是为了兼容性而使用Win9x / NT / 2K控件 - 主题XP +控件略大。 This解释了如何详细添加此类清单。