使用Direct2D和DirectWrite(C++、DirectX)制作按钮
Producing buttons with Direct2D and DirectWrite (C++, DirectX)
关于如何使用Direct2D和DirectWrite生成按钮,我已经四处寻找了一段时间,但没有成功。我对形状、文字和爵士乐很熟悉。然而,我突然想到,我可能用错误的方式看待它。
举个例子:
您可以使用Direct2D和DirectWrite API,直接处理所有输入事件。
我现在认为这意味着我不能像使用XAML那样快速生成功能齐全的按钮。我会画出按钮,在点击时手动检查鼠标的位置,它是否在按钮边界内,然后处理事件?无需单击即可悬停的类似方法。
使用Direct2D和DirectWrite时需要这种方法吗?
我对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
如果你还没有准备好推出自己的,谷歌搜索"direct2dgui框架"似乎会带来一些有希望的结果。
对不起,我帮不了你了。
是的,要用Direct2D绘制UI按钮,你需要自己处理所有事情,为什么?Direct2D是一个二维图形API,而不是控件库。你需要绘制按钮的布局,并处理按钮的消息(如点击、鼠标悬停…),你失去了很多方便,这很耗时,但最重要的是:你可以自己控制它!
点击测试任务请参见:ID2D1Geometry::FillsContainsPoint()
。
- 问:如何使用C++中的按钮从窗口打开窗口
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- QML按钮点击功能执行顺序
- 当用户超过按钮点击限制时报告
- 函数计算用户按下按钮的频率
- 热键/按钮,根据需要进行编译,但不运行(在F5和Ctrl+Shift+B之间)
- 如何在directx/c++中进行平移/缩放操作
- FLTK:按下哪个按钮 - 将数字传递给按钮的回调 (lambda)
- 如何通过按下第三个窗口中的按钮,将QString从一个窗口获取到另一个窗口
- 垂直方向的 Gtk3+ 旋转按钮 (c/c++)
- Qt自定义QPush按钮未显示在布局上
- DrawIndexedInstanced 具有不同的 Index Count per Instance (Directx
- SDL 操纵杆按钮按下/C++
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- Qt中来自不同功能的按钮引用
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- ImGui 在单击按钮后冻结
- WinAPI 无法创建按钮
- Directx 11 - CompileFromFile() is not compiling
- 使用Direct2D和DirectWrite(C++、DirectX)制作按钮