Direct2D QuickStart
Direct2d是原生 代码, 即时模式 API 为了创建 2D 图像。
· Step 1: IncludeDirect2D Header
· Step 2: Createan ID2D1Factory
· Step 3: Createan ID2D1HwndRenderTarget
· Create a SimpleDirect2D Application
Drawing a Simple Rectangle
画一个矩形 使用GDI, 你可以 处理WM_PAINT message, as shown in the following code.
C++
switch(message)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint(hwnd, &ps);
// Obtain the size ofthe drawing area.
RECT rc;
GetClientRect(
hwnd,
&rc
);
// Save the originalobject
HGDIOBJ original = NULL;
original = SelectObject(
ps.hdc,
GetStockObject(DC_PEN)
);
// Create a pen.
HPEN blackPen = CreatePen(PS_SOLID, 3, 0);
// Select the pen.
SelectObject(ps.hdc, blackPen);
// Draw a rectangle.
Rectangle(
ps.hdc,
rc.left + 100,
rc.top + 100,
rc.right - 100,
rc.bottom - 100);
DeleteObject(blackPen);
// Restore theoriginal object
SelectObject(ps.hdc, original);
EndPaint(hwnd, &ps);
}
return 0;
// Code for handling other messages.
使用Direct2D 绘制是相同的,。
Step 1: Include Direct2D Header
included2d1.h 头文件
Step 2: Create an ID2D1Factory
创建ID2D1Factory.
ID2D1Factory* pD2DFactory =NULL;
HRESULT hr =D2D1CreateFactory(
D2D1_FACTORY_TYPE_SINGLE_THREADED,
&pD2DFactory
);
ID2D1Factory 接口是使用direct2D 的起点。 使用ID2D1Factory 创建Direct2D 资源。
本例子创建的是 单线程 的 Factory
一般来说,你的程序一旦创建工厂 并留住它为程序的生命。
Step 3: Create an ID2D1HwndRenderTarget
在你创建工厂之后,使用 它 去 创建 渲染目标。
// Obtain the size of the drawing area.
RECT rc;
GetClientRect(hwnd, &rc);
// Create a Direct2D render target
ID2D1HwndRenderTarget* pRT = NULL;
HRESULT hr =pD2DFactory->CreateHwndRenderTarget(
D2D1::RenderTargetProperties(),
D2D1::HwndRenderTargetProperties(
hwnd,
D2D1::SizeU(
rc.right - rc.left,
rc.bottom - rc.top)
),
&pRT
);
前面的示例使用ID2D1HwndRenderTarget,呈现到屏幕的部分。
对你可以修改该 行为 使用 D2D1_RENDER_TARGET_TYPE 标记当你创建 渲染目标时。
CreateHwndRenderTarget 方法带着3个参数。
第一个参数是D2D1_RENDER_TARGET_PROPERTIES 结构体。指定远程显示项目,是否强制渲染目标渲染软件或硬件,和 DPI。代码在该例子里使用D2D1::RenderTargetProperties帮助函数同意默认的渲染目标properties
第二个参数 , D2D1_HWND_RENDER_TARGET_PROPERTIES 结构体 指定 HWND ,给 渲染 内容 指定 HWDN 。 初始化 渲染目标 的大小(像素) ,它是 presentationoptions。
本范例使用D2D1::HwndRenderTargetProperties helper 函数 去指定一个HWDN,和初始化大小。
它是使用默认的呈现 选项。
第三个参数是 一个 指向 接收 渲染目标 引用 的指针的地址。
当你创建一个渲染目标和可用的硬件加速。你分配资源 在电脑的GPU 上。 使用创建 一次 渲染目标 和 尽可能保留它。 你获得性能上的优势。你的程序应该一次过 创建 渲染目标 并 保持 它们 为了 程序的生命, 或 直到 D2DERR_RECREATE_TARGET 收到错误。
当你收到该错误时, 你需要 重新创建 渲染目标(和它创建的 所有资源)。
Step 4: Create a Brush
就如 一个factory , 渲染 目标 可以创建 drawing 资源。 在本例子 ,渲染目标创建 一个画刷。
ID2D1SolidColorBrush* pBlackBrush = NULL;
if(SUCCEEDED(hr))
{
pRT->CreateSolidColorBrush(
D2D1::ColorF(D2D1::ColorF::Black),
&pBlackBrush
);
}
Direct2D同样提供了 其他 类型的画刷: 渐变的画刷 为了 画 线性或呈放射状的 渐变,
和 bitmap 画刷 为了使用 位图s 和样式 去画 。
一些绘图APIs 提供 钢笔绘制轮廓和画笔填充形状。 Direct2D是不同的:它不提供pen 对象使用画笔绘制轮廓和填充形状。 绘制轮廓时 ,使用 画笔ID2D1StrokeStyle接口控制路径stroking操作。
画笔只能用于创建它的 渲染目标,创建它 和 使用其他的渲染目标在同一个 资源域。
一般来说,你应该仅需创建一次画刷,和 保留他们为了创建它们的 渲染目标的生命,
ID2D1SolidColorBrush 是唯一的 异常;
因为它 是相当 廉价 去创建,当你想 画 一帧 时 你可以创建ID2D1SolidColorBrush ,
没有任何显著的 优化 命中。每次你需要用它的时 你同样可以使用 单一的ID2D1SolidColorBrush 并 只是 改变它的 颜色。