`

向 MFC 项目添加 D2D 对象

 
阅读更多
此演练介绍如何将基本 Direct2D (D2D) 对象添加到 Visual C++ Microsoft 基础类库 (MFC) 项目中,然后将该项目构建到在渐变背景上输出“Hello, world”的应用程序中。

<sentencetext xmlns="http://www.w3.org/1999/xhtml">此演练演示如何完成以下这些任务:</sentencetext>

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">创建 MFC 应用程序。</sentencetext>

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">创建一个纯色画笔和一个线性渐变画笔。</sentencetext>

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">修改渐变画笔,以便在调整窗口大小时它会相应更改。</sentencetext>

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">实现 D2D 绘图处理程序。</sentencetext>

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">验证结果。</sentencetext>

说明说明

对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置

<sentencetext xmlns="http://www.w3.org/1999/xhtml">若要完成本演练,您必须拥有 Visual Studio。</sentencetext>

创建 MFC 应用程序

  1. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“文件”</span>菜单上指向<span class="label" xmlns="http://www.w3.org/1999/xhtml">“新建”</span>,然后单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“项目”</span>。</sentencetext>

  2. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“新建项目”</span>对话框左窗格的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“已安装的模板”</span>下,展开<span class="label" xmlns="http://www.w3.org/1999/xhtml">“Visual C++”</span>,然后选择<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFC”</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">在中间窗格中,选择<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFC 应用程序”</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“名称”</span>框中键入 <span class="input" xmlns="http://www.w3.org/1999/xhtml">MFCD2DWalkthrough</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“确定”</span>。</sentencetext>

  3. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFC 应用程序向导”</span>中,单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“完成”</span>而不更改任何设置。</sentencetext>

创建一个纯色画笔和一个线性渐变画笔

  1. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“解决方案资源管理器”</span>中的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFCD2DWalkthrough”</span>项目的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“头文件”</span>文件夹中,打开 MFCD2DWalkthroughView.h。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">将以下代码添加到 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong> 类以创建三个数据变量。</sentencetext>

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

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">保存文件并将其关闭。</sentencetext>

  2. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“源文件”</span>文件夹中,打开 MFCD2DWalkthroughView.cpp。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">在 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong> 类的构造函数中,添加以下代码。</sentencetext>

    // 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)));
    

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">保存文件并将其关闭。</sentencetext>

修改渐变画笔,以便在调整窗口大小时它会相应更改

  1. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“项目”</span>菜单上单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“类向导”</span>。</sentencetext>

  2. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFC 类向导”</span>中的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“类名”</span>下,选择 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong>。</sentencetext>

  3. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“消息”</span>选项卡上的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“消息”</span>框中,选择 <span xmlns="http://www.w3.org/1999/xhtml"><span class="input">WM_SIZE</span></span>,然后单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“添加处理程序”</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">此操作将 <strong xmlns="http://www.w3.org/1999/xhtml">OnSize</strong> 消息处理程序添加到 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong> 类。</sentencetext>

  4. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“现有处理程序”</span>框中,选择 <strong xmlns="http://www.w3.org/1999/xhtml">OnSize</strong>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“编辑代码”</span>以显示 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView::OnSize</strong> 方法。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">在此方法的末尾,添加以下代码。</sentencetext>

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

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">保存文件并将其关闭。</sentencetext>

实现 D2D 绘图处理程序

  1. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“项目”</span>菜单上单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“类向导”</span>。</sentencetext>

  2. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“MFC 类向导”</span>中的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“类名”</span>下,选择 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong>。</sentencetext>

  3. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“消息”</span>选项卡上,单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“添加自定义消息”</span>。</sentencetext>

  4. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“添加自定义消息”</span>对话框的<span class="label" xmlns="http://www.w3.org/1999/xhtml">“自定义 Windows 消息”</span>框中,键入 <span class="input" xmlns="http://www.w3.org/1999/xhtml">AFX_WM_DRAW2D</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“消息处理程序名称”</span>框中,键入 <span class="input" xmlns="http://www.w3.org/1999/xhtml">OnDraw2D</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">选择<span class="label" xmlns="http://www.w3.org/1999/xhtml">“已注册的消息”</span>选项,然后单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“确定”</span>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">此操作将 <span xmlns="http://www.w3.org/1999/xhtml"><span class="input">AFX_WM_DRAW2D</span></span> 消息的消息处理程序添加到 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView</strong> 类。</sentencetext>

  5. <sentencetext xmlns="http://www.w3.org/1999/xhtml">在<span class="label" xmlns="http://www.w3.org/1999/xhtml">“现有处理程序”</span>框中,选择 <strong xmlns="http://www.w3.org/1999/xhtml">OnDraw2D</strong>。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">单击<span class="label" xmlns="http://www.w3.org/1999/xhtml">“编辑代码”</span>以显示 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView::OnDraw2D</strong> 方法。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">对 <strong xmlns="http://www.w3.org/1999/xhtml">CMFCD2DWalkthroughView::OnDrawD2D</strong> 方法使用以下代码。</sentencetext>

    afx_msg LRESULT CMFCD2DWalkthroughView::OnDraw2D(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 TRUE;
    }
    

    <sentencetext xmlns="http://www.w3.org/1999/xhtml">保存文件并将其关闭。</sentencetext>

验证结果

  • <sentencetext xmlns="http://www.w3.org/1999/xhtml">生成并运行应用程序。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">它应有一个在您调整窗口大小时更改的渐变矩形。</sentencetext> <sentencetext xmlns="http://www.w3.org/1999/xhtml">“Hello World!”应显示在矩形中央。</sentencetext>

http://msdn.microsoft.com/zh-cn/library/gg482848.aspx

分享到:
评论

相关推荐

    Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip

    Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 Java毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zipJava毕业设计-基于Springboot+Vue旅游网站设计-源码+数据库+使用文档+演示视频(高分项目).zip

    Music-app-master.zip

    Music-app-master

    基于springboot的权限管理系统.zip

    基于springboot的java毕业&课程设计

    外东洪路中段.m4a

    外东洪路中段.m4a

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档(毕业设计&课程设计&项目开发)

    基于matlab+Simulink模拟的微电网系统包括包括电源、电力电子设备等+源码+开发文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 这是一个完整的微电网模型,包括电源、电力电子设备、使用MatLab和Simulink的负载和电源模型。该模型基于费萨尔·穆罕默德的硕士论文《微网格建模与仿真》。 什么是微电网 模拟的微电网使用一组电源和负载在与任何集中式电网(宏电网)断开连接的情况下工作,并自主运行,为其局部区域提供电力。该仿真对微电网在稳态下进行建模,以分析其对输入变化的瞬态响应。 此模拟的目的 对系统进行全年模拟,测量负载、产量、电压和频率。 给出简化规划和资源评估阶段的方法。

    MySQL8.4.0 LTS(mysql-server-8.4.0-1debian12-amd64.deb-bundle)

    MySQL8.4.0 LTS(mysql-server_8.4.0-1debian12_amd64.deb-bundle.tar)适用于Debian 12 Linux (x86, 64-bit)

    改进混沌游戏优化(ICgo)matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于SpringBoot,SpringCloud的微服务大型在线学习平台实现.zip

    基于springboot的java毕业&课程设计

    圣经投屏软件(5种语言版本)

    圣经投屏软件(5种语言版本)

    基于SpringBoot,Spring Security实现的前后端分离权限管理简易系统.zip

    基于springboot的java毕业&课程设计

    jSP在线教学质量评价系统的设计与实现(源代码)

    在线教学质量评价系统可以方便和全面地收集教师教学工作的数据,提供师生网上评教的评分结果,快速集中收集各方面的评教信息,使教务管理部门能够及时了解教学动态和师资情况,为教务老师提供相关决策支持,为职称评聘提供教学工作质量的科学依据,同时减轻了教务老师的工作量。

    测障测角小车程序+仿真电路DSN文件+设计报告doc.zip

    包含作品的设计论文doc文档+测障测角小车程序+仿真电路DSN文件,可直接修改,适合于电赛备赛、课程设计、毕设参考等。 设计制作了一款具有智能判断功能的小车,功能强大。小车具有以下几个功能:自动避障功能;寻迹功能(按路面的黑色轨道行驶);趋光功能(寻找前方的点光源并行驶到位);检测路面所放置的铁片的个数的功能;计算并显示所走的路程和行走的时间,并可发声发光。作品可以作为大学生学习嵌入式控制的强有力的应用实例。     作品以两电动机为主驱动,通过各类传感器件来采集各类信息,送入主控单元AT89S52单片机,处理数据后完成相应动作,以达到自身控制。电机驱动电路采用高电压,高电流,四通道驱动集成芯片L293D。其中避障采用红外线收发来完成;铁片检测部分采用电感式接近开关LJ18A3-8-Z/BX检测;黑带检测采用红外线接收二极管完成;趋光部分通过3路光敏二极管对光源信号的采集,再经过ADC0809转化为数字信号送单片机处理判别方向。由控制单元处理数据后完成相应动作,实现了无人控制即可完成一系列动作,相当于简易机器人。 关键字:智能控制   蔽障  红外线收发  寻迹行驶  趋光行驶

    基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计

    1412基于Python卷积神经网络人脸识别驾驶员疲劳检测与预警系统设计毕业源码案例设计 卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Pooling)。 全连接层(Fully Connected Layer): 在CNN的末端,通常会有几层全连接层(也称为密集层或线性层)。这些层中的每个神经元都与前一层的所有神经元连接。 全连接层通常用于对提取的特征进行分类或回归。 训练过程: CNN的训练过程与其他深度学习模型类似,通过反向传播算法和梯度下降(或其变种)来优化网络参数(如滤波器权重和偏置)。 训练数据通常被分为多个批次(mini-batches),并在每个批次上迭代更新网络参数。 应用: CNN在计算机视觉领域有着广泛的应用,包括图像分类、目标检测、图像分割、人脸识别等。 它们也已被扩展到处理其他类型的数据,如文本(通过卷积一维序列)和音频(通过卷积时间序列)。 随着深度学习技术的发展,卷积神经网络的结构和设计也在不断演变,出现了许多新的变体和改进,如残差网络(ResNet)、深度卷积生成对抗网络(DCGAN)等。

    基于Vue + SpringBoot实现的前后端分离的仿小米商城项目.zip

    基于springboot的java毕业&课程设计

    QKD 协议密钥率的数值评估matlab代码.zip

    1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    基于springboot校园社团管理.zip

    基于springboot的java毕业&课程设计

    基于卷积神经网络的城市感知评估.zip

    卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Po

    课设毕设基于SpringBoot+Vue的医院急诊系统 LW+PPT+源码可运行.zip

    课设毕设基于SpringBoot+Vue的医院急诊系统 LW+PPT+源码可运行.zip

    无人驾驶实战-无人驾驶高精地图

    无人驾驶高精地图,学习无人驾驶高精地图

    企业数据治理之数据存储治理方案.pptx

    企业数据治理之数据存储治理方案

Global site tag (gtag.js) - Google Analytics