c++ - 使用 Direct2D 和 DirectWrite(C++、DirectX)制作按钮

标签 c++ button directx direct2d

我一直在寻找如何使用 Direct2D 和 DirectWrite 生成按钮,但没有成功。我对形状、文字和爵士乐都很满意。然而,我突然意识到我可能以错误的方式看待它。

取这句话:

you draw your controls and content for your app using the Direct2D and DirectWrite APIs, handling all the input events directly.

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

使用 Direct2D 和 DirectWrite 时需要这种方法吗?

最佳答案

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

这是我的实现供引用:
header :https://github.com/RobJinman/dodge/tree/master/Dodge/include/dodge/ui
来源:https://github.com/RobJinman/dodge/tree/master/Dodge/src/ui

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

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

关于c++ - 使用 Direct2D 和 DirectWrite(C++、DirectX)制作按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20688471/

相关文章:

ios - 将 "Delete"按钮添加到 UITableViewCell

html - 将单击的按钮标记为事件的

javascript - 模糊透明的按钮背景

audio - 散列原始音频数据

c++ - 从 C++ 宏中删除额外的括号

c++ - Tarjan 实现中反复出现的衔接点

c++ - mso.dll 和 msoutl.olb 的路径变量

c# - 引用 AudioVideoPlayback 命名空间

directx - DirectSound 是 Windows 的最佳音频抽象层吗?

c++ - 更改 C++ 中的当前工作目录