介绍如何将基本 Direct2D (D2D) 对象添加到 Visual C++ Microsoft 基础类库 (MFC) 项目中,然后将该项目构建到在渐变背景上输出“Hello, world”的应用程序中。
此演练演示如何完成以下这些任务:
- 创建 MFC 应用程序。
- 创建一个纯色画笔和一个线性渐变画笔。
- 修改渐变画笔,以便在调整窗口大小时它会相应更改。
- 实现 Direct2D绘图处理程序。
- 验证结果。
系统必备:
若要完成本演练,需要 Visual Studio。
创建 MFC 应用程序
- 在“文件”菜单上指向“新建”,然后单击“项目”。
- 在“新建项目”对话框左窗格的“已安装的模板”下,展开“Visual C++”,然后选择“MFC”。 在中间窗格中,选择“MFC 应用程序”。 在“名称”框中键入 MFCD2DWalkthrough。 单击“确定”。
- 在“MFC 应用程序向导”中,单击“完成”而不更改任何设置。
创建一个纯色画笔和一个线性渐变画笔
- 在“解决方案资源管理器”中的“MFCD2DWalkthroughView 类以创建三个数据变量。
C m_pTextFormat; C m_pBlackBrush; CD2DLinearGradientBrush* m_pLinearGradientBrush;保存文件并将其关闭。
-
在“源文件”文件夹中,打开 MFC 类的构造函数中,添加以下代码。
// Enable D2D support for this window: EnableD2DSupport(); // Initialize D2D resources: m_pBlackBrush = new CD2D1::ColorF::Black)); m_pTextFormat = new C); m_pTextFormat->Get()->SetTextAlignment(DWRITE_TEXT_ALIGNMENT_CENTER); m_pTextFormat->Get()->SetParagraphAlignment(DWRITE_PARAGRAPH_ALIGNMENT_CENTER); ]; gradientStops[0].color = D2D1::ColorF::White); gradientStops[0].position = 0.f; gradientStops[1].color = D2D1::ColorF::Indigo); gradientStops[1].position = 1.f; m_pLinearGradientBrush = new CD2DLinearGradientBrush(GetRenderTarget(), gradientStops, ARRAYSIZE(gradientStops), 0)));
保存文件并将其关闭。
修改渐变画笔,以便在调整窗口大小时它会相应更改
-
在“项目”菜单上单击“类向导”。
-
在“MFC 类向导”中的“类名”下,选择
CMFCD2DWalkthroughView。 -
在“消息”选项卡上的“消息”框中,选择
WM_SIZE,然后单击“添加处理程序”。 此操作将OnSize消息处理程序添加到CMFC 类。 -
在“现有处理程序”框中,选择
OnSize。 单击“编辑代码”以显示CMFC 方法。 在此方法的末尾,添加以下代码。m_pLinearGradientBrush->SetEndPoint(CPoint(cx, cy));
保存文件并将其关闭。
实现 Direct2D绘图处理程序
-
在“项目”菜单上单击“类向导”。
-
在“MFC 类向导”中的“类名”下,选择
CMFCD2DWalkthroughView。 -
在“消息”选项卡上,单击“添加自定义消息”。
-
在“添加自定义消息”对话框的“自定义 Windows 消息”框中,键入
AFX_WM_DRAW2D。 在“消息处理程序名称”框中,键入OnDraw2D。 选择“已注册的消息”选项,然后单击“确定”。 此操作将AFX_WM_DRAW2D消息的消息处理程序添加到CMFC 类。 -
在“现有处理程序”框中,选择
OnDraw2D。 单击“编辑代码”以显示CMFC 方法使用以下代码。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!”应显示在矩形中央。
参考链接:https://msdn.microsoft.com/zh-cn/library/gg482848.aspx