创建好一个窗体后,就可以使用Direct2D绘制了。
Direct2D程序需要包含头文件d2d1.h,和静态库d2d1.lib。这里简单介绍一下Direct2D程序初始化过程。
一、ID2D1Factory
首先是ID2D1Factory类,是Direct2D其他对象的工厂类,需要首先创建。使用D2D1CreateFactory函数构造,第一个参数是程序线程类型。正常创建返回S_OK,否则返回的HRESULT包含错误信息。
1 | ID2D1Factory * d2dFactory; |
二、RenderTarget
Direct2D的渲染都在渲染目标(?)对象中进行,创建工厂类对象后就可以使用它创建一个RenderTarget。
Direct2D提供多种RenderTarget,这里使用窗口句柄渲染目标ID2D1HwndRenderTarget可以实现在目标窗口上的渲染。
使用ID2D1Factory对象的成员函数CreateHwndRenderTarget构造,第一个参数可以通过D2D1::RenderTargetProperties函数获得,第二个参数通过D2D1::HwndRenderTargetProperties获得,提供窗口句柄和大小:
1 | ID2D1HwndRenderTarget* hdl; |
三、固体颜色刷
固体颜色画刷ID2D1SolidColorBrush是由渲染目标对象的成员函数CreateSolidColorBrush创建的:
1 | ID2D1SolidColorBrush* brush; |
四、开始画图
现在,可以开始画图了。
调用渲染目标对象的成员函数BeginDraw开始绘图,Clear函数用某一颜色清屏;我们使用DrawRectangle函数用笔刷绘制一个矩形,最后调用EndDraw函数结束绘图。Direct2D的屏幕坐标以左上角为原点,x轴向右,y轴向下。
1 | hdl->BeginDraw(); |
下面展示的就是Direct2D绘图的HelloWorld程序了:
1 |
|
画出来了:
五、封装初始化过程
Fr2D封装Direct2D的初始化过程。将工厂类ID2D1Factory和ID2D1HwndRenderTarget封装到Fr2D类,是Fr2D的工厂类,完成对Fr2D中其他对象的创建;ID2D1SolidColorBrush封装为Fr2DBrush。如此,上面的HelloWorld程序就变成了:
1 |
|
