【问题标题】:Normal looking button with c++ / win32带有 c++ / win32 的正常外观按钮
【发布时间】:2009-09-25 01:37:39
【问题描述】:

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

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

我哪里错了? 谢谢

【问题讨论】:

    标签: c++ winapi


    【解决方案1】:

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

    【讨论】:

    • -1 这个答案在链接工作时可能有用,但现在链接已失效,此处没有其他内容。
    • 谢谢,我撤回了我的反对票。我认为 stackoverflow 上的答案应该是自包含的,以避免此类问题。死链接或临时中断很烦人。
    【解决方案2】:

    在您的项目目录中创建一个名为“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 项目中(右键单击项目图标并选择“添加”->“现有项目”。

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

    希望这会有所帮助...

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 您可以只使用 * 而不是 x86,而不是指定架构:processorArchitecture='*' 编辑:意识到这是从 2009 年开始.. 抱歉撞了:P
      • 就像有效的评论一样。
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多