1、简介

对于如何提高2D的绘制效率,一直在进行着尝试。基于OpenGL的纹理贴出做过一些二维图像处理的工作,但相对麻烦些,需要由GDI/GDI+绘制后,在贴出去,麻烦,且由于OpenGL停止了更新,不支持多线程等原因,慢慢的继续做下去的动力就不足。无意间看到MSDN中关于Direct 2D的结论(现有 GDI 代码将继续在 Windows 7 下正常工作。 但是,编写新的图形呈现代码时,应考虑 Direct2D ,因为它更好地利用新式 GPU。),故而打算写一序列的博客,记录下学习和测试Direct2D编程和性能的内容。

2、基于对话框的第一个 Direct 2D程序

新建MFC对话框项目,项目名称自己写即可,本例子项目名称为:001D2DDialog,建好后,在解决方案中查看代码,如下所示

“解决方案资源管理器”中的001_D2D_Dialog项目的“头文件”文件夹中,打开 001_D2D_DialogDlg.h。 将以下代码添加到 001_D2D_DialogDlg类以创建三个数据变量。

CD2DTextFormat* m_pTextFormat;
CD2DSolidColorBrush* m_pBlackBrush;
CD2DLinearGradientBrush* m_pLinearGradientBrush;

在001_D2D_DialogDlg.cpp中,在 001_D2D_DialogDlg类的构造函数中,添加以下代码:

    // Enable D2D support for this window:EnableD2DSupport();// Initialize D2D resources:m_pBlackBrush = new CD2DSolidColorBrush(GetRenderTarget(), D2D1::ColorF(D2D1::ColorF::Black));m_pTextFormat = new CD2DTextFormat(GetRenderTarget(), _T("Verdana"), 50);m_pTextFormat->Get()->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER);m_pTextFormat->Get()->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER);D2D1_GRADIENT_STOP gradientStops[2];gradientStops[0].color = D2D1::ColorF(D2D1::ColorF::White);gradientStops[0].position = 0.f;gradientStops[1].color = D2D1::ColorF(D2D1::ColorF::Indigo);gradientStops[1].position = 1.f;m_pLinearGradientBrush = new CD2DLinearGradientBrush(GetRenderTarget(),gradientStops, ARRAYSIZE(gradientStops),D2D1::LinearGradientBrushProperties(D2D1::Point2F(0, 0), D2D1::Point2F(0, 0)));

右键单击项目,在菜单上单击“类向导”,如下图:

打开如下类向导窗口

“消息”选项卡上的“消息”框中,选择 WM_SIZE,然后单击“添加处理程序”。 此操作将 OnSize 消息处理程序添加到001_D2D_DialogDlg类

“现有处理程序”框中,选择 OnSize。 单击“编辑代码”以显示 001_D2D_DialogDlg::OnSize 方法。 在此方法的末尾,添加以下代码。

m_pLinearGradientBrush->SetEndPoint(CPoint(cx, cy));

在“消息”选项卡上,单击“添加自定义消息”。

“添加自定义消息”对话框的“自定义 Windows 消息”框中,键入 AFX_WM_DRAW2D。 在“消息处理程序名称”框中,自动显示OnAfxWmDraw2d。 选择“已注册的消息”选项,然后单击“确定”。 此操作将 AFX_WM_DRAW2D 消息的消息处理程序添加到001_D2D_DialogDlg类。

“现有处理程序”框中,选择 OnAfxWmDraw2d。 单击“编辑代码”以显示 001_D2D_DialogDlg::OnAfxWmDraw2d 方法。 对001_D2D_DialogDlg::OnAfxWmDraw2d 方法使用以下代码。

afx_msg LRESULT CMy001D2DDialogDlg::OnAfxWmDraw2d(WPARAM wParam, LPARAM lParam)
{CHwndRenderTarget* pRenderTarget = (CHwndRenderTarget*)lParam;ASSERT_VALID(pRenderTarget);CRect rect;GetClientRect(rect);pRenderTarget->FillRectangle(rect, m_pLinearGradientBrush);pRenderTarget->DrawText(_T("Hello, World!"), rect, m_pBlackBrush, m_pTextFormat);return 0;
}

3、显示效果

生成并运行应用程序。 它应有一个在您调整窗口大小时更改的渐变矩形。“Hello World!”应显示在矩形中央。

4、结束语

下一篇,将重点梳理下D2D的接口以及MFC对其的封装。

001:你好Direct 2D! 在对话框中初次使用D2D相关推荐

  1. VC++在对话框中加入属性页

    当一个基于对话框的程序中有相当多的控件时,你一定会想到使用属性页来将这些控件分类放置.本文针对这种方法来讨论几种可能实现的方案. 方案一 本方案的例子请见源代码打包文件中的Property1部分 在对 ...

  2. Word中新建样式/修改样式对话框中的各个选项意义

    名称(N): 显示您在"样式"对话框中选择的样式的名称.您可以更改此样式,或者键入新名称来新建样式,长文档中,样式的名称要注意易于理解和记忆,如"篇样式",&q ...

  3. 【转载】在对话框中加入属性页

    原文地址:http://www.vckbase.com/document/viewdoc/?id=398 在对话框中加入属性页 作者:黄晨量 下载本文全部源代码 当一个基于对话框的程序中有相当多的控件 ...

  4. 我的VC++——对话框中显示GIF格式的图片

    PictureEx图片显示类支持以下格式的图片:GIF (including animated GIF87a and GIF89a), JPEG, BMP, WMF, ICO, CUR等,我特别推崇的 ...

  5. 利用tab_control控件在对话框中加入属性页的方法详细介绍

    在对话框中加入属性页 方案一 在对话框上放置一个Tab Control的控件,再在对话框上放置所需的控件(本例放置了2个按钮,试图在每个标签中显示一个).然后利用Class Wizard来为Tab C ...

  6. VC MFC程序,在About对话框中获取并显示程序的版本号

    =================================================本文为HeYuanHui原作 转载必须确保本文完整并完整保留原作者信息及本文原始链接! NN:     ...

  7. 在对话框中加入属性页

    资料来源 http://www.vckbase.com/document/viewdoc/?id=398 在对话框中加入属性页 作者:黄晨量 下载本文全部源代码 当一个基于对话框的程序中有相当多的控件 ...

  8. MFC小程序003------MFC使用WebBrowser组件,在对话框中创建滚动视图,动态创建一个静态文本控件并设置鼠标单击的消息响应...

    MFC小程序截图: 一.在MFC中简单使用WebBrowser的ActiveX插件的方法: 见博文:  http://blog.csdn.net/supermanking/article/detail ...

  9. 对话框中加入标签页的5种方法

    (2008-07-08 15:25 博客搬家拾遗) 标签页是MFC控件里有一点难用的东西,今天看到了一篇相关文章,觉得写得比较系统,而且浅显易懂,特地转来,与大家分享的同时也留备自己以后查用. (以下 ...

最新文章

  1. PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法
  2. Android中怎样使用createTempFile实现将字节数据创建到临时文件并转换成FileOutputStream和FileInputStream
  3. POJ2195 Going Home 最小费用最大流
  4. Google 的开源技术protobuf 简介与例子
  5. Nexus for linux安装
  6. C语言_选择结构的程序设计
  7. 虚拟机网络桥接-NAT-HOST的理解
  8. 冷热分离和直接使用大数据库_「系统架构」如何通过分离冷热数据提升系统性能?...
  9. 消费者启动,允许期间报task supervisor timed out 异常,解决
  10. jtm 一键安装mysql_MySQL数据实时增量同步到Redis
  11. python判断是否为素数_python判断一个数是否为素数
  12. ASP.NET ZERO 学习 —— (1) 介绍
  13. android仿最新版本微信相册--附源码
  14. 微信显示android23,微信7.0.23内测版发布 新增6个新功能
  15. iOS — 百度地图 使用
  16. Java通过Jolt调用Tuxedo服务
  17. C# break和continue用法
  18. 图形学课设 塔防游戏
  19. FPGA开源网站和论坛
  20. 软件测试中的“黑天鹅”

热门文章

  1. MinIO+NPS+DDNS+旧笔记本搭建私有图床
  2. VB.net数据库编程中DataGrid控件的使用技巧
  3. SuperOneClick一键Root工具使用方法
  4. FancyCache要怎样设置才最大发挥硬盘的性能?
  5. ctfshow七夕杯
  6. 说说QQ音乐项目的那些bug
  7. 10.JavaSE第10天_集合泛型
  8. error: identifier “AT_CHECK“ is undefined
  9. yolov5使用教程训练our数据——手把手教你训练预测(以阿里天池比赛为例)
  10. 网课答案查题微信公众号搭建教程