演练:向 MFC 项目添加 D2D 对象
本演练介绍如何将基本 Direct2D (D2D) 对象添加到 Visual C++、Microsoft 基础类库 (MFC) 项目,然后将项目生成到在渐变背景上打印“Hello, World!”的应用程序中。
演练演示了如何完成这些任务:
创建 MFC 应用程序。
创建纯色画笔和线性渐变画笔。
修改渐变画笔,使其在调整窗口大小时进行相应更改。
实现 D2D 绘制处理程序。
验证结果。
注意
以下说明中的某些 Visual Studio 用户界面元素在计算机上出现的名称或位置可能会不同。 这些元素取决于你所使用的 Visual Studio 版本和你所使用的设置。 有关详细信息,请参阅个性化设置 IDE。
先决条件
若要完成本演练,必须在 Visual Studio 中安装使用 C++ 的桌面开发工作负载以及可选的 Visual C++MFC for x86 和 x64 组件。
创建 MFC 应用程序
使用 MFC 应用程序向导创建 MFC 应用程序。 有关如何为 Visual Studio 版本打开向导的说明,请参阅演练:使用新的 MFC Shell 控件。
在“名称”框中,键入“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!”应显示在矩形的中心。