【问题标题】:Producing buttons with Direct2D and DirectWrite (C++, DirectX)使用 Direct2D 和 DirectWrite(C++、DirectX)制作按钮
【发布时间】:2014-01-08 10:06:50
【问题描述】:

我一直在寻找有关如何使用 Direct2D 和 DirectWrite 生成按钮的方法,但没有成功。我对形状、文字和爵士乐感到满意。

但是我突然想到我可能以错误的方式看待它。取一句话:

“您使用 Direct2D 和 DirectWrite API 为您的应用绘制控件和内容,直接处理所有输入事件。”

我现在认为这意味着我不能像使用 XAML 那样快速生成功能齐全的按钮,而是绘制按钮,手动检查鼠标单击时的位置,是否在按钮边界内然后处理事件?无需点击即可悬停的类似方法。

在 UI 中使用 Direct2D 和 DirectWrite 时需要这种方法吗?还是我错过了什么。

任何帮助表示赞赏!干杯:)

【问题讨论】:

    标签: c++ button directx direct2d


    【解决方案1】:

    是的,要使用 Direct2D 绘制 UI Button,您需要自己处理所有事情,为什么? Direct2D 是 2D 图形 API,而不是控件库。您需要绘制按钮的布局,并处理按钮的消息(例如单击,鼠标悬停......),您失去了很多方便,而且很耗时,但最重要的是:您可以控制自己动手!

    【讨论】:

      【解决方案2】:

      我没有任何使用 DirectX 的经验,但是在 OpenGL 中我从头开始构建我的按钮。假设您已经实现了动画精灵,您的按钮本质上是播放某些动画以响应被单击、悬停等操作的精灵,并且您可以注册回调。在我的 2D 引擎中,我有一个名为 UiButton 的类,它继承了 Sprite,并监听各种 UI 事件。当您想要处理键盘导航(箭头键 + 输入以选择)时,它会变得更加复杂,因为您必须考虑按钮的连接方式以及在任何给定时刻它们中的哪一个具有焦点。

      这是我的实现供参考:
      标头:https://github.com/RobJinman/dodge/tree/master/Dodge/include/dodge/ui
      来源:https://github.com/RobJinman/dodge/tree/master/Dodge/src/ui

      如果您不准备推出自己的产品,谷歌搜索“direct2d gui 框架”似乎会带来一些有希望的结果。

      很抱歉,我无法提供更多帮助。

      【讨论】:

        【解决方案3】:

        我会看看 Graphucks。它是由 Jeremiah Morrill(Microsoft MVP)创建的,我对它有很好的体验。 http://graphucks.codeplex.com/

        【讨论】:

          猜你喜欢
          • 2010-10-22
          • 2012-01-26
          • 2012-11-15
          • 1970-01-01
          • 2011-02-19
          • 1970-01-01
          • 2020-03-08
          • 2021-06-26
          • 1970-01-01
          相关资源
          最近更新 更多