本演练介绍如何将基本的 Direct2D (D2D) 对象添加到 Visual C++,Microsoft基础类库 (MFC) 项目,然后将该项目生成到在渐变背景上打印“Hello, World!”的应用程序。
本演练演示如何完成以下任务:
创建 MFC 应用程序。
创建纯色画笔和线性渐变画笔。
修改渐变画笔,以便在调整窗口大小时对其进行适当更改。
实现 D2D 绘图处理程序。
验证结果。
注释
计算机可能会在以下说明中显示某些 Visual Studio 用户界面元素的不同名称或位置。 你拥有的 Visual Studio 版本以及所使用的设置决定了这些元素。 有关更多信息,请参阅 自定义 IDE。
先决条件
若要完成本演练,必须使用具有 C++ 工作负载的 桌面开发 以及 适用于 x86 和 x64 组件的可选 Visual C++ MFC 安装 Visual Studio。
创建 MFC 应用程序
使用 MFC 应用程序向导 创建 MFC 应用程序。 请参阅 指南:使用新的 MFC Shell 控件,了解如何在您的 Visual Studio 版本中打开向导。
在 “名称 ”框中,键入 MFCD2DWalkthrough。 选择确定。
在 MFC 应用程序向导中,选择 “完成 ”而不更改任何设置。
创建纯色画笔和线性渐变画笔
在 解决方案资源管理器的 MFCD2DWalkthrough 项目中的 “头文件” 文件夹中,打开 MFCD2DWalkthroughView.h。 将此代码添加到
CMFCD2DWalkthroughView
类以创建三个数据变量:CD2DTextFormat* m_pTextFormat; CD2DSolidColorBrush* m_pBlackBrush; CD2DLinearGradientBrush* m_pLinearGradientBrush;
保存文件并将其关闭。
在 “源文件” 文件夹中,打开MFCD2DWalkthroughView.cpp。 在类的
CMFCD2DWalkthroughView
构造函数中,添加以下代码:// 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)));
保存文件并将其关闭。
修改渐变画笔,以便在调整窗口大小时对其进行适当更改
在 “项目 ”菜单上,选择 “类向导”。
在 MFC 类向导的 “类名”下,选择
CMFCD2DWalkthroughView
。在“ 消息 ”选项卡上的“ 消息 ”框中,选择
WM_SIZE
并选择 “添加处理程序”。 此作将OnSize
消息处理程序添加到CMFCD2DWalkthroughView
类。在 “现有处理程序 ”框中,选择
OnSize
。 选择 “编辑代码” 以显示CMFCD2DWalkthroughView::OnSize
方法。 在方法的末尾,添加以下代码。m_pLinearGradientBrush->SetEndPoint(CPoint(cx, cy));
保存文件并将其关闭。
实现 D2D 绘图处理程序
在 “项目 ”菜单上,选择 “类向导”。
在 MFC 类向导的 “类名”下,选择
CMFCD2DWalkthroughView
。在“ 邮件 ”选项卡上,选择“ 添加自定义邮件”。
在“ 添加自定义消息 ”对话框中的 “自定义 Windows 消息 ”框中键入 AFX_WM_DRAW2D。 在 “消息处理程序名称 ”框中,键入 OnDraw2D。 选择 “已注册的消息 ”选项,然后选择“ 确定”。 此作将AFX_WM_DRAW2D消息的消息处理程序添加到
CMFCD2DWalkthroughView
类。在 “现有处理程序 ”框中,选择
OnDraw2D
。 选择 “编辑代码” 以显示CMFCD2DWalkthroughView::OnDraw2D
方法。 将此代码用于CMFCD2DWalkthroughView::OnDrawD2D
方法: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; }
保存文件并将其关闭。
验证结果
生成并运行应用程序。 它应具有一个渐变矩形,可在调整窗口大小时更改。 “Hello World!” 应显示在矩形的中心。