三角形绘制完成以后,接下来介绍如何给项目添加主入口函数。打开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的更多相关文章

  1. Win10系列:VC++绘制几何图形2

    新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...

  2. Win10系列:VC++绘制几何图形1

    本小节主要介绍如何使用Direct2D来绘制几何图形,其中会使用到FillGeometry函数和FillEllipse函数,FillGeometry函数用于填充几何图形的内部区域,而FillEllip ...

  3. Win10系列:VC++绘制几何图形5

    打开D2DBasicAnimation.h头文件,并在D2DBasicAnimation类中添加如下的代码: private:     //声明成员变量point     D2D1_POINT_2F ...

  4. Win10系列:VC++绘制几何图形3

    在绘制三角形之前,首先需要创建一个三角形,打开D2DBasicAnimation.h头文件,在D2DBasicAnimation类中添加如下的代码: private:     //声明成员变量obje ...

  5. Cocos2D中使用CCDrawNode绘制几何图形崩溃的解决

    在cocos2D v3.x中已经不能像在v2.x中那样直接调用ccDrawXXX函数来绘制几何图形了. 我们可以使用CCDrawNode或者CCRenderer来绘制图形. 但是官方的Api手册中说的 ...

  6. Win10系列:C#应用控件进阶9

    RectangleGeometry 在使用RectangleGeometry控件绘制矩形时,矩形的位置和尺寸由Rect属性定义,该属性指定矩形的相对位置.高度和宽度.Rect有四个参数,前两个参数表示 ...

  7. Win10系列:C#应用控件进阶6

    路径 路径(Path)可以用来定义任意形状的曲线和几何图形,当然这种任意性也带来了复杂性.为了方便的绘制几何图形,微软在Visual Studio 2012安装包中为程序开发者提供了免费的Blend ...

  8. Win10系列:C#应用控件进阶7

    PathGeometry 前面介绍了Path的使用方法,接下来介绍PathGeometry类.PathGeometry提供了描绘由弧线.曲线和直线组成的多个复杂图形的方法.PathGeometry的核 ...

  9. HTML5绘制几何图形

    <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head>    < ...

随机推荐

  1. 串口.Qt532测试(异步)

    环境:Win7x64.Qt5.3.2 MSVC OpenGL(x86).vs2010(x86) 项目所在位置:E:\Project_Qt532\SeriesPort_Qt532_Z ZC:这里 同步方 ...

  2. VC.时间(网页内容收集)

    1.VC++获得当前系统时间的几种方案_记忆53秒_新浪博客.html(http://blog.sina.com.cn/s/blog_676271a60101i0hb.html) 1.1.内容保存: ...

  3. Meta referrer标签的,可以防止CSRF的攻击

    Meta referrer标签的简要介绍 在某些情况下,出于一些原因,网站想要控制页面发送给 server 的 referer 信息的情况下,可以使用这一 referer metadata 参数. 参 ...

  4. Qt解析Json数据

    1 JSON数据简介   JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式.它基于 ECMAScript (欧洲计算机协会制定的js规范) ...

  5. POI 导入导出时异常[java.io.IOException: Broken pipe]

    使用用POI导出文件时抛出异常java.io.IOException: Broken pipe ERROR: 'java.io.IOException: Broken pipe' org.apache ...

  6. 全排列问题Ⅰ(Java实现)

    给定一个没有重复数字的序列,返回其所有可能的全排列. 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1 ...

  7. CentOS7 上安装 Lua5.3

    1.CentOS7默认已经安装了5.1.4 ①查看当前lua版本号:lua -v Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio ②查看lua和 ...

  8. Docker微容器+微服务将颠覆传统的软件架构

    从我的观点看:Docker是一个微容器,一个云计算的微PaaS容器,类似JVM但比其更强大的容器,直接基于Linux内核,支持各种语言,它比VM虚拟机更加轻量,能够在Linux或云计算IaaS等平台上 ...

  9. (GoRails)链接link_to到当前页current Page 并使用参数 (类ActionController::Parameters)

    https://gorails.com/episodes/rails-link-to-current-page-with-params?autoplay=1 如何链接到当前页并增加,移除,或者修改UR ...

  10. p1209 Barn Repair

    用优先队列存放不连续的断点及断的位置.优先取间距大的,在断点断开. #include <iostream> #include <cstdio> #include <cma ...