#define SAFE_RELEASE(p) if(p) { p->Release(); p = NULL; } // 2D ID2D1Factory* g_pD2DFactory = NULL; // Direct2D factory ID2D1HwndRenderTarget* g_pD2DRenderTarget = NULL; // Direct2D render target ID2D1SolidColorBrush* g_pD2DBlackBrush = NULL; // A black brush fro Direct2D RECT g_D2DRect; // Render area // Create Direct2D Factory HRESULT hr; hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_pD2DFactory); if(FAILED(hr)) { MessageBoxA(0, "Create D2D Factory Failed!", "Error", 0); return; } // Create Direct2D Render Target hr = g_pD2DFactory->CreateHwndRenderTarget(D2D1::RenderTargetProperties(), D2D1::HwndRenderTargetProperties(g_hWnd, D2D1::SizeU(1366, 768)), &g_pD2DRenderTarget); if(FAILED(hr)) { MessageBoxA(0, "Create D2D Render Target failed!", "Error", 0); return; } // Create D2D Brush hr = g_pD2DRenderTarget->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::Red), &g_pD2DBlackBrush); if(FAILED(hr)) { MessageBoxA(0, "Create D2D Brush Failed!", "Error", 0); return; } // D2D Draw g_pD2DRenderTarget->BeginDraw(); g_pD2DRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White)); // Warning: Clear() is Between BeginDraw() and EndDraw() g_pD2DRenderTarget->DrawRectangle(D2D1::RectF(100.0f, 100.0f, 500.0f, 500.0f), g_pD2DBlackBrush); HRESULT hr = g_pD2DRenderTarget->EndDraw(); if(FAILED(hr)) { MessageBoxA(0, "D2D Draw Failed!", "Error", 0); return; } // Release Resources void CleanUp() { SAFE_RELEASE(g_pD2DBlackBrush); SAFE_RELEASE(g_pD2DRenderTarget); SAFE_RELEASE(g_pD2DFactory); }