【问题标题】:Skinning WinAPI Controls剥皮 WinAPI 控件
【发布时间】:2010-12-27 08:25:47
【问题描述】:

如果您曾经看过 Adob​​e Creative Suite 5 (CS5) 中的应用程序,您可能已经注意到它看起来不像原生的 Windows GUI。他们已经对其进行了修改以使其具有不同的外观。

有人会从哪里开始制作具有自定义皮肤的应用程序? CS5 使用 Adob​​e Source 库进行小部件/控件管理,因此我尝试下载并编译 Adob​​e Source Library 以查看是否可以制作像 Photoshop CS5 这样的漂亮皮肤应用程序,但在最终编译和测试后,我意识到该库仅用于管理小部件,而不是像 CS5 那样为 GUI 设置皮肤。

我应该从哪里开始制作一个漂亮的皮肤程序,比如 Adob​​e Cs5 应用程序?谁能指出我正确的方向?

我是否只是使用来自 WinAPI 的 WM_PAINT 消息并使用 openGL 或其他方式呈现我自己的小部件?

【问题讨论】:

  • Adobe Creative Suite 中的许多程序使用自定义控件库,而不是 Windows API 提供的标准控件。对现有控件进行皮肤处理并不是一件简单的事情。

标签: c++ winapi user-interface skinning


【解决方案1】:

使用 QT 和 QML。它没有陡峭的学习曲线。你用 JavaScript 定义你的 GUI 并添加许多效果,并享受在你能想象到的每一件事情中使用 PNG。然后你用 C++ 做你的应用程序逻辑。事实上,除了使用 QML 的 UI 之外,您还可以做一些相当高级的事情,但最好还是像往常一样分离关注点。

我在工作中使用它来发布产品。覆盖 WM_PAINT 不是 Windows 中的唯一方法,但在自定义绘制 UI 时,我强烈推荐 QT 而不是 Win32 API。至少根据我的经验,这比我使用 Win32 API 的冒险要容易得多。

【讨论】:

    【解决方案2】:

    如果你想自己实现自定义控件,你需要实现自己的WM_PAINT并使用GDI/GDI+进行绘制。对于顶级窗口和弹出窗口,您可以使用Layered windows。但是我认为如果您不想自己实施,您可以在互联网上以合理的价格找到很多专业的自定义控件。

    【讨论】:

      【解决方案3】:

      我认为您创建现代皮肤应用程序的选择是:QTWPF(通过 C++/CLI)。

      【讨论】:

        【解决方案4】:

        如果你有一个现有的 Win32 API 应用程序并且你不想使用支持皮肤的库重写它,你可能想看看Stardock DirectSkin

        如果您决定重写您的应用程序,我也会推荐 Qt。 Guitar Pro 6 使用 Qt 重写,阅读更多关于他们的经验 here

        【讨论】:

        猜你喜欢
        • 2012-09-26
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多