C++ Direct2D和Windows通用控件

C++ Direct2D和Windows通用控件,c++,winapi,direct2d,common-controls,C++,Winapi,Direct2d,Common Controls,我还是Direct2D的新手,所以这可能是个愚蠢的问题 我希望应用程序的UI支持部分透明和硬件加速等功能。为了实现适当的透明度,我需要使用API,它需要一个源设备上下文。所以我使用Direct2D创建了一个简单的。到目前为止还不错,似乎效果不错 现在,我想在这个设置中使用一些常用控件。使用普通的Direct2D绘图功能重新创建一个简单的按钮相对容易,但像编辑控件这样的东西需要做更多的工作。特别是当您想要执行用户期望从编辑控件中执行的常规文本处理操作时。因此,我想使用现有的Windows功能来实现

我还是Direct2D的新手,所以这可能是个愚蠢的问题

我希望应用程序的UI支持部分透明和硬件加速等功能。为了实现适当的透明度,我需要使用API,它需要一个源设备上下文。所以我使用Direct2D创建了一个简单的。到目前为止还不错,似乎效果不错

现在,我想在这个设置中使用一些常用控件。使用普通的Direct2D绘图功能重新创建一个简单的按钮相对容易,但像编辑控件这样的东西需要做更多的工作。特别是当您想要执行用户期望从编辑控件中执行的常规文本处理操作时。因此,我想使用现有的Windows功能来实现这一点

通过阅读MSDN,可以通过发送消息让常用控件将自己绘制到设备上下文中。但是,我怎么知道什么时候发送这个消息呢?当然,当用户在编辑控件中键入内容时,我可以从该控件中获取通知,但我仍然需要确定闪烁的光标应该在何时绘制,例如


这通常是怎么做的?我有什么选择?提前感谢您的指点。

您的选择是:抛弃Direct2D,过上更幸福的生活。除非您有令人信服的理由使用Direct2D,否则不要使用它。Direct2D的使用案例很少,在3D游戏中渲染2D HUD基本上是唯一相关的。如果您希望提高性能,那么您会失望:所涉及的开销通常会使渲染速度变慢。GDI是硬件加速的关键(块传输和alpha混合)。对于尚未使用Direct3D的应用程序,它通常会更快。@IInspectable XAML和HTML优先使用Direct2D而不是GDI,对于渲染,尤其是动画,它的速度要快几个数量级。尽管如此,D2D和常用控件不能很好地配合使用(XAML和HTML在内部实现编辑控件),DC呈现目标也不是最快的,XAML和HTML是标记语言。他们当然不使用Direct2D。我只是猜测你分别指的是WPF和Internet Explorer。WPF的不同之处在于它直接渲染到Direct3D曲面,而不经过GDI DC。不管怎样,平滑动画是一个糟糕的性能指标。另外,在进行别名渲染时,Direct2D的图像质量低于GDI(这在控件中很常见)。@IInspectable据我所知,所有主要的HTML渲染器都使用Direct2D而不是GDI。WPF也不使用GDI,但我指的是Windows应用商店应用程序使用的XAML渲染器。