在Direct2D(1_1)上花了相当多的时间之后,我正在寻找有关使用Direct2D创建独立控件的信息,主要是使用命中测试和抽象布局。
创建一个完整的场景很简单(特别感谢Kenny Kerr),但我没有找到将代码分离为可重用UI组件的好策略。
最终我还想为这些控件提供包装器,这些控件也可以在WPF中使用。谢谢你的帮助。
[编辑2月19日 - 7 AM]
考虑这个非常简单的例子: Render(或Draw)函数呈现几个圆角矩形几何,其中一些重叠。现在让我们将这些圆形的每一个视为一个独立的ui控件。所以我们将圆角矩形抽象到它自己的类中,提供一个渲染函数,它具有渲染目标的参数和绘制的点。但还有更多需要考虑的问题。控件不一定知道它的位置。我们的系统可以继续构建的通用命中测试策略非常重要。
正如@CodeAngry指出的那样,应该实现可见,启用,zOrder,宽度,高度等属性。但布局系统应该是我们的出发点。
这一切都难以置信,但我知道这些东西每天都在完成,我希望能找到一些模式或策略来考虑。再次感谢。
答案 0 :(得分:1)
通用命中测试可以通过以下方式完成:
你应该存储zordered控制层次结构,而这本身就会跳过排序。
控件不需要知道它们的位置,但需要知道它们的尺寸(如果是矩形)和/或形状。经理知道位置和边界矩形。结合这些元素,你就可以进行命中测试。首先确保该点落在边界矩形中,然后才对照控件的几何体进行命中测试。在命中测试之前,通过减去控制管理器已知的控制客户端偏移量,将HWND客户端点更新到控制客户端点。
这就是我(计划)这样做的方式。但我让它无窗户。如果每个控件都在自己的子HWND中,那么生活就会轻松得多!
PS :如果您想交换意见,可以给我发邮件。如果你愿意,你可以找到我的电子邮件。 ;)