Win10系列:VC++绘制几何图形4
三角形绘制完成以后,接下来介绍如何给项目添加主入口函数。打开D2DBasicAnimation.h头文件,添加如下的代码定义一个DirectXAppSource类。
//定义类DirectXAppSource,实现IFrameworkViewSource接口
ref class DirectXAppSource : Windows::ApplicationModel::Core::IFrameworkViewSource
{
public:
//实现IFrameworkViewSource接口中的方法
virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView();
};
在上面的代码中,DirectXAppSource类实现IFrameworkViewSource接口。在IFrameworkViewSource接口中声明了一个CreateView函数,为了实现此函数,首先需要在DirectXAppSource类中对这个函数进行声明。
定义了DirectXAppSource类以后,接下来在D2DBasicAnimation.cpp源文件中添加CreateView函数的实现代码,此函数返回一个D2DBasicAnimation类的对象。代码如下所示:
//创建D2DBasicAnimation类的对象
IFrameworkView^ DirectXAppSource::CreateView()
{
return ref new D2DBasicAnimation();
}
为了使项目能正常运行,最后需要在D2DBasicAnimation.cpp源文件中添加如下代码,定义一个主入口函数。
int main(Platform::Array<Platform::String^>^)
{
DirectXAppSource^ directXAppSource = ref new DirectXAppSource();
CoreApplication::Run(directXAppSource);
return 0;
}
在上面的代码中,定义了项目的主入口函数main,在此函数中创建一个DirectXAppSource类的对象directXAppSource,并将这个对象作为参数传递给CoreApplication类的Run函数。
运行Direct2DDemo项目将会在应用窗口中绘制如图20-16所示的红色三角形。

图20-16 Direct2D绘制的三角形
2.使用FillEllipse函数绘制圆形
在上面的Direct2DDemo项目中使用FillGeometry函数绘制了一个三角形,接下来将在这个项目的基础上继续介绍如何使用FillEllipse函数绘制一个圆形。打开D2DBasicAnimation.cpp源文件,并在Render函数中添加绘制圆形的实现代码,具体代码如下所示:
void D2DBasicAnimation::Render()
{
//调用BeginDraw开始绘图
d2dContext->BeginDraw();
//设置应用窗口的背景颜色
d2dContext->Clear(D2D1::ColorF(D2D1::ColorF::Gray));
//定义一个圆形
D2D1_ELLIPSE ellipse = D2D1::Ellipse(D2D1::Point2F(100.0f, 100.0f), 100.0f, 100.0f);
//填充圆形区域
d2dContext->FillEllipse(&ellipse,redBrush.Get());
//结束图形的绘制操作
d2dContext->EndDraw();
}
在上面的代码中,首先调用d2dContext指针所指向的对象的BeginDraw函数开始绘制图形,接着调用d2dContext指针所指向的对象的Clear函数将应用窗口的背景颜色设置为灰色。然后调用Ellipse函数得到一个D2D1_ELLIPSE结构体的变量ellipse,此结构体变量包含椭圆的圆心、X轴半径和Y轴半径,将圆心坐标设置为{100.f,100.f },把X轴半径和Y轴半径都设置为100.f来表示一个圆形。接下来以redBrush指针所指向的画刷对象作为参数,调用d2dContext指针所指向的对象的FillEllipse函数来填充ellipse结构体变量所定义的圆形区域。最后调用d2dContext指针所指向的对象的EndDraw函数结束图形的绘制操作。
运行Direct2DDemo项目将会在应用窗口中绘制如图20-17所示的红色圆形。

图20-17 Direct2D绘制的圆形
上面所绘制的圆形在应用窗口中是静止的,可以通过平移这个圆形中的点使其在应用窗口中移动,下面将介绍如何实现圆形的移动。
Win10系列:VC++绘制几何图形4的更多相关文章
- Win10系列:VC++绘制几何图形2
新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...
- Win10系列:VC++绘制几何图形1
本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllip ...
- Win10系列:VC++绘制几何图形5
打开D2DBasicAnimation.h头文件,并在D2DBasicAnimation类中添加如下的代码: private: //声明成员变量point D2D1_POINT_2F ...
- Win10系列:VC++绘制几何图形3
在绘制三角形之前,首先需要创建一个三角形,打开D2DBasicAnimation.h头文件,在D2DBasicAnimation类中添加如下的代码: private: //声明成员变量obje ...
- Cocos2D中使用CCDrawNode绘制几何图形崩溃的解决
在cocos2D v3.x中已经不能像在v2.x中那样直接调用ccDrawXXX函数来绘制几何图形了. 我们可以使用CCDrawNode或者CCRenderer来绘制图形. 但是官方的Api手册中说的 ...
- Win10系列:C#应用控件进阶9
RectangleGeometry 在使用RectangleGeometry控件绘制矩形时,矩形的位置和尺寸由Rect属性定义,该属性指定矩形的相对位置.高度和宽度.Rect有四个参数,前两个参数表示 ...
- Win10系列:C#应用控件进阶6
路径 路径(Path)可以用来定义任意形状的曲线和几何图形,当然这种任意性也带来了复杂性.为了方便的绘制几何图形,微软在Visual Studio 2012安装包中为程序开发者提供了免费的Blend ...
- Win10系列:C#应用控件进阶7
PathGeometry 前面介绍了Path的使用方法,接下来介绍PathGeometry类.PathGeometry提供了描绘由弧线.曲线和直线组成的多个复杂图形的方法.PathGeometry的核 ...
- HTML5绘制几何图形
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head> < ...
随机推荐
- IPC 之 Socket 的使用
一.概述 我们知道在开发中,即时通讯.设备间的通信都是使用 Socket 实现,那当然用它来实现进程间通信更是不成问题.Socket 即套接字,是一个对 TCP / IP协议进行封装 的编程调用接口( ...
- Android开发代码规范总结
本篇开始总结Android开发中的一些注意事项,提高代码质量(仅供参考): 1. Activity间的数据通信,对于数据量比较大的,避免使用 Intent + Parcelable 的方式,可以考虑 ...
- Windows 多用户接续设置
第1步:如果想真正实现多用户接续,请安装角色:remote desktop service.第2步: gpedit.msc,找到“计算机配置”-“管理模板”-“Windows 组件”-“远程桌面服务” ...
- 理解css相邻兄弟选择器
今天在菜鸟教程看到了css组合选择符的“相邻兄弟选择器”,刚开始对这个概念有些不太理解,通过查阅资料并且经过一些试验总算有了些头绪. 原文解释是“相邻兄弟选择器(Adjacent sibling se ...
- python+opencv 运行环境搭建
1:安装pycharm,验证码你懂的 2:安装python3.5以上,或3.6,python2和3 的版本差异还蛮大 3:安装opencv,如下图 以上是方法一,还有之中方法是下载whl文件再手动安装 ...
- spring容器bean的作用域 & spring容器是否是单例的一些问题
Spring容器中Bean的作用域 当通过Spring容器创建一个Bean实例时,不仅可以完成Bean实例的实例化,还可以为Bean指定特定的作用域.Spring支持如下5种作用域: singleto ...
- spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback
spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...
- 20165327 2017-2018-2 《Java程序设计》第6周学习总结
20165327 2017-2018-2 <Java程序设计>第6周学习总结 教材内容总结 第八章 String类常用方法 public int length() public boole ...
- 20170706xlVBA批量提取word表格中的自我评分
单位里普遍存在各种低效率的办公行为,比如每年的自我评分.评分细目表为word文档,每行一个项目,每个项目要填写得分事项和分值,组长审核之后转成Excel向上递交.主要涉及到问题就是word文档中一列得 ...
- 树分治TLE原因
1.树分治有logn层,如果各层都进行一次memset相当于大小没变,可能TLE: 2.根节点全局变量会变,需要用局部变量记录,还有子树大小. 3.找根的时候的size是当前size,而不是输入数据中 ...