D2D 学习笔记第一课 初始化D2D 画一个矩形

头文件 #include <D2D1.h>

lib文件 #pragma comment(lib,"D2D1.lib")

首先 新建一个 win32 程序 加入头文件和lib文件  步骤1.申明全局变量 步骤2.创建工厂 步骤3.画矩形 步骤4.清除资源

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
//声明全局变量
#include <D2D1.h>
#include <D2D1.h>
#pragma comment(lib,"D2D1.lib")
ID2D1Factory* pD2DFactory = NULL; // Direct2D factory 对象
ID2D1HwndRenderTarget* pRenderTarget = NULL;   // Render target渲染的场所
ID2D1SolidColorBrush* pBlackBrush = NULL; // 固定颜色的画刷

/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/

//创建D2D工厂
void CreatD2DIni()
{
	HRESULT hr;
	//1.创建工厂
	hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &pD2DFactory);//参数1.单线程 、第二个参数用来接收创建的工厂
	if (FAILED(hr)) {MessageBox(hWnd, L"Create D2D factory failed!", L"Error", 0);return;}

	RECT rc;
	GetClientRect(hWnd, &rc);
	// 2.创建Render target
	 hr = pD2DFactory->CreateHwndRenderTarget(
		D2D1::RenderTargetProperties(),//参数一是Render target属性,包括渲染模式,象素格式,DPI等,D2D提供了一个函数D2D1::RenderTargetProperties(),可以用来生成默认的属性
		D2D1::HwndRenderTargetProperties(hWnd,D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)),//第二个参数是Hwnd类型的Render target属性
		&pRenderTarget					//最后一个参数用来接收创建的Render target
		);
	if (FAILED(hr)) {MessageBox(hWnd, L"Create render target failed!", L"Error", 0);	return;}
	
	//3.创建一个画刷
	hr = pRenderTarget->CreateSolidColorBrush(
		D2D1::ColorF(D2D1::ColorF::Red),//颜色
		&pBlackBrush//接收画刷
	);
	if (FAILED(hr))   {MessageBox(hWnd, L"Create brush failed!", L"Error", 0);return;}
}

VOID DrawRectangle()
{
		CreatD2DIni();//创建初始化一下
		pRenderTarget->BeginDraw();//开始绘画  绘画一定要在 BeginDraw 和 EndDraw 之间
		/*************************************************/
		//画一个红色背景
		pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::YellowGreen));

		//画一个矩形
		pRenderTarget->DrawRectangle(
			D2D1::RectF(50.f, 50.f, 100.f, 100.f),//区域
			pBlackBrush,5.0f	);//画刷
		//画一个直线
		pRenderTarget->DrawLine(
			D2D1::Point2F(10.f, 200.f),//开始坐标
			D2D1::Point2F(150.f, 200.f),//结束目标
			pBlackBrush,5.0f);//画刷

		D2D1_ROUNDED_RECT roundedRect = D2D1::RoundedRect(
			D2D1::RectF(200.f, 50.f, 300.f, 200.f),
			10.0f,	//圆角矩形x轴半径
			10.0f	//圆角矩形y轴半径
		);
		//画圆角矩形半径
		pRenderTarget->DrawRoundedRectangle(roundedRect, pBlackBrush, 5.0f);
		
		//画圆角
		D2D1_ELLIPSE ellipse = D2D1::Ellipse(D2D1::Point2F(300.0f, 300.0f), 50.0f, 50.0f);//椭圆圆心坐标 长轴半径 短轴半径
		pRenderTarget->DrawEllipse(ellipse, pBlackBrush,5.0f);//参数一 椭圆结构体 参数二 画刷 参数3 画笔 默认是1

		/*************************************************/
		HRESULT hr = pRenderTarget->EndDraw();//结束绘画
		if (FAILED(hr)) {MessageBox(NULL, L"Draw failed!", L"Error", 0);return;}
}

VOID Cleanup()//删除资源
{
	//#define SAFE_RELEASE(P) if(P){P->Release() ; P = NULL ;}
		SAFE_RELEASE(pRenderTarget);
		SAFE_RELEASE(pBlackBrush);
		SAFE_RELEASE(pD2DFactory);
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值