D2D1Factory 로 랜더타겟을 생성한 것처럼 Write를 위한 팩토리가 있고, 필수적인 format이 있다.
// 추가적으로 추가해야하는 것들
#include <dwrite.h>
#pragma comment(lib,"dwrite.lib")
// 또 다른 팩토리
IDWriteFactory* g_pDWriteFactory;
IDWriteTextFormat* g_pDWriteTextFormat;
BOOL InitDirect2D()
{
// 슬슬 형태가 익숙하죠?
// DirectWrite 팩토리 생성하기
hr = DWriteCreateFactory(
DWRITE_FACTORY_TYPE_SHARED,
__uuidof(g_pDWriteFactory),
reinterpret_cast<IUnknown**>(&g_pDWriteFactory));
// DirectWrite의 텍스트 형식 개체를 만들기
hr = g_pDWriteFactory->CreateTextFormat(
L"Cooper", // FontName 제어판-모든제어판-항목-글꼴-클릭 으로 글꼴이름 확인가능
NULL,
DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL,
DWRITE_FONT_STRETCH_NORMAL,
50.0f, // Font Size
L"", //locale
&g_pDWriteTextFormat
);
// 텍스트를 수평 및 수직으로 중앙에 맞추기
g_pDWriteTextFormat->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);
g_pDWriteTextFormat->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);
}
int WINAPI WinMain(생략한겁니다)
{
// 쭉 생략 ...
while (TRUE)
{
g_pRenderTarget->BeginDraw();
g_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::CadetBlue));
D2D1_SIZE_F size = g_pRenderTarget->GetSize();
WCHAR sc_helloWorld[] = L"Hello, World!";
g_pRenderTarget->DrawText(
sc_helloWorld,
ARRAYSIZE(sc_helloWorld) - 1,
g_pDWriteTextFormat,
D2D1::RectF(0, 0, size.width, size.height/2),
g_pBlackBrush);
g_pRenderTarget->EndDraw();
}
}