此演练演示如何完成以下这些任务:
创建 MFC 应用程序。
创建一个纯色画笔和一个线性渐变画笔。
修改渐变画笔,以便在调整窗口大小时它会相应更改。
实现 D2D 绘图处理程序。
验证结果。
说明 |
---|
对于在以下说明中使用的某些 Visual Studio 用户界面元素,您的计算机可能会显示不同的名称或位置。这些元素取决于您所使用的 Visual Studio 版本和您所使用的设置。有关更多信息,请参见 Visual Studio 设置。 |
创建 MFC 应用程序
在 “文件”菜单上指向 “新建”,然后单击 “项目”。
在 “新建项目”对话框左窗格的 “已安装的模板”下,展开 “Visual C++”,然后选择 “MFC”。 在中间窗格中,选择 “MFC 应用程序”。 在 “名称”框中键入 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!”应显示在矩形中央。