Direct2D 第2篇 绘制椭圆

原文:Direct2D 第2篇 绘制椭圆

#include <windows.h>
#include <d2d1.h>
#include <d2d1helper.h>
#include <dwrite.h>
#pragma comment(lib, "dwrite.lib")
#pragma comment(lib, "d2d1.lib")

HINSTANCE g_hinst;
HWND g_hwnd;

ID2D1Factory * g_factory;
ID2D1HwndRenderTarget * g_render_target;
ID2D1SolidColorBrush  * g_brush;

void OnSize(LPARAM lparam)
{
	if(g_render_target)
		g_render_target->Resize(D2D1::SizeU(LOWORD(lparam),HIWORD(lparam)));
}

bool AppInit()
{
	D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &g_factory);

	RECT rc;
	GetClientRect(g_hwnd, &rc);

	g_factory->CreateHwndRenderTarget(
		D2D1::RenderTargetProperties(),
		D2D1::HwndRenderTargetProperties(g_hwnd, D2D1::SizeU(rc.right - rc.left, rc.bottom - rc.top)	),
		&g_render_target);

	g_render_target->CreateSolidColorBrush(D2D1::ColorF(D2D1::ColorF::ForestGreen), &g_brush);

	return true;
}

void OnPaint()
{
	if(!g_render_target)
		return;

	g_render_target->BeginDraw();

	// Clear Background
	g_render_target->Clear(D2D1::ColorF(0.63, 0.84, 0.00)); 

	// Draw Ellipse
	D2D1_SIZE_F size = g_render_target->GetSize();
	D2D1_ELLIPSE ellipse;

	ellipse.point = D2D1::Point2F(size.width/2.0, size.height/2.0);
	ellipse.radiusX = 200;
	ellipse.radiusY =100;
	g_render_target->FillEllipse(&ellipse, g_brush);//绘制图形

	g_render_target->EndDraw();
}

void OnDestroy()
{
	g_brush->Release();
	g_render_target->Release();
	g_factory->Release();
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
	switch(msg)
	{
	case WM_PAINT:
		OnPaint();
		break;

	case WM_SIZE:
		OnSize(lparam);
		break;

	case WM_DESTROY:
		OnDestroy();
		PostQuitMessage(0);
		break;

	default:
		return DefWindowProc(hwnd, msg, wparam, lparam);
	}
	return 0;
}

int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	WNDCLASSEX wc;
	MSG msg;  

	memset(&wc,0,sizeof(wc));
	wc.cbSize = sizeof(WNDCLASSEX);
	wc.lpfnWndProc = WndProc;
	wc.hInstance = hinst;
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
	wc.lpszClassName = "WindowClass";
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION); 

	if(!RegisterClassEx(&wc))
	{
		MessageBox(NULL, "Window Registration Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	g_hinst = hinst;

	g_hwnd = CreateWindowEx(WS_EX_CLIENTEDGE,"WindowClass","Direct2D Demo",WS_VISIBLE|WS_OVERLAPPEDWINDOW,
		CW_USEDEFAULT,
		CW_USEDEFAULT,
		640,
		480,
		NULL, NULL, hinst, NULL);

	if(g_hwnd == NULL)
	{
		MessageBox(NULL, "Window Creation Failed!","Error!",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	if(!AppInit())
	{
		MessageBox(NULL, "Application Initialisation Failed !","Error",MB_ICONEXCLAMATION|MB_OK);
		return 0;
	}

	while(GetMessage(&msg, NULL, 0, 0) > 0)
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}

原文地址:https://www.cnblogs.com/lonelyxmas/p/10823166.html

时间: 2024-08-01 09:03:20

Direct2D 第2篇 绘制椭圆的相关文章

Direct2D 第3篇 绘制文字

原文:Direct2D 第3篇 绘制文字 #include <windows.h> #include <d2d1.h> #include <d2d1helper.h> #include <dwrite.h> #pragma comment(lib, "dwrite.lib") #pragma comment(lib, "d2d1.lib") HINSTANCE g_hinst; HWND g_hwnd; ID2D1Fa

Direct2D 第5篇 绘制图像

原文:Direct2D 第5篇 绘制图像 我加载的图像是一张透明底PNG图像,背景使用渐变的绿色画刷 #include <windows.h> #include <d2d1.h> #include <d2d1helper.h> #include <dwrite.h> #pragma comment(lib, "dwrite.lib") #pragma comment(lib, "d2d1.lib") #include

Direct2D 第6篇 绘制多种风格的线条

原文:Direct2D 第6篇 绘制多种风格的线条 上图是使用Direct2D绘制的线条,Direct2D在效率上比GDI/GDI+要快几倍,GDI/GDI+绘图是出了名的"慢",不过Direct2D的绘制线条代码,要比GDI/GDI+要繁锁一些. 1.首先,初始化Direct2D(可以参考?http://blog.csdn.net/ubuntu_ai/article/details/50365536 ) 2.创建线条的风格实例 ?ID2D1StrokeStyle,以下函数Create

如何使用canvas绘制椭圆,扩展非chrome浏览器中的ellipse方法

这篇博文主要针对浏览器中绘制椭圆的方法扩展.在网上搜索了很多,发现他们绘制椭圆的方式都有缺陷.其中有压缩法,计算法,贝塞尔曲线法等多种方式.但是都不能很好的绘制出椭圆.所有我就对这个绘制椭圆的方式进行了研究,发现压缩法是可以完美实现椭圆绘制的.废话不多说,直接上代码了. 1 if (!CanvasRenderingContext2D.prototype.ellipse) { 2 CanvasRenderingContext2D.prototype.ellipse = function(x, y,

asp.net GDI+ 绘制椭圆 ,弧线,扇形

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.UI; 6 using System.Web.UI.WebControls; 7 using System.Drawing; 8 using System.Drawing.Drawing2D; 9 10 public partial class _Default : Syst

html5 绘制椭圆

最近的项目要使用html5 绘制椭圆,参考网上的例子发现可以使用贝塞尔曲线绘制,不过要绘制四条贝塞尔曲线. 在html5的过程中发现可以使用绘制圆形的方式来绘制椭圆 html5中绘制圆的函数如下: arc(x,y,r,start,end,clockwise);具体函数的含义请自行查看, 实现的具体代码如下: /** * * @param x 中心 x坐标 * @param y 中心 y坐标 * @param a 椭圆 a * @param b 椭圆 b * @param arcStart 起始角

在CAD中如何绘制椭圆?有什么好的办法吗?

在CAD中绘制椭圆?有什么好的办法吗?小伙伴们都知道,在CAD行业中,日常的工作就是绘制编辑CAD图纸,在编辑CAD图纸文件的时候都需要借助CAD编辑器的绘制,CAD编辑器中有许多的功能可以提供我们使用,比如说三点定弧,绘制多边形等一些操作,但是在CAD中如何绘制椭圆?下偶偶伴们知道要怎么进行操作吗?有什么好的办法吗?下面我们就一起来看看吧! 第一步:首先还是需要在日常使用的电脑中任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD编辑器专业版,进入官网,鼠标点击安装最新版本的CAD编辑器.

怎么使用CAD编辑器进行绘制椭圆?

怎么使用CAD编辑器进行绘制椭圆?在CAD行业中每天的工作就是要绘制CAD图纸,但是一张完整的CAD图纸也是有许多简单的图纸进行组合起来的,首先要学会的就会绘制出各种不同类型的图形,那怎么使用CAD编辑器进行绘制椭圆?具体有什么好的办法吗?那小面小编就来教教大家具体操作步骤,想要了解的朋友可以一起来看看,希望能够帮助到你们. 第一步:打开电脑,在电脑桌面上任意的打开一个浏览器,在浏览器的搜索框中搜索迅捷CAD编辑器(专业版),然后在搜索的结果中,点击官网进入,进入之后根据提示步骤来下载安装最新版

Direct2D 第1篇 最简单的D2D程序

原文:Direct2D 第1篇 最简单的D2D程序 编译之前,得先安装DirectX SDK #include <windows.h> #include <d2d1.h> #include <d2d1helper.h> #include <dwrite.h> #pragma comment(lib, "dwrite.lib") #pragma comment(lib, "d2d1.lib") static HINSTA