逐步解說:將 D2D 物件加入至 MFC 專案
本逐步解說教導如何將基本 Direct2D (D2D) 物件加入至 Visual C++ MFC 程式庫專案,然後將專案建置成為在漸層背景中列印 "Hello, world" 的應用程式。
逐步解說將示範如何完成這些工作:
建立 MFC 應用程式。
建立純色筆刷和線性漸層筆刷。
修改漸層筆刷,讓它在視窗調整大小時適當變更。
實作 D2D 繪圖處理常式。
驗證結果。
注意事項 |
---|
您的電腦可能會在下列說明中,以不同名稱或位置顯示某些 Visual Studio 使用者介面項目。您所擁有的 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!" 應該會顯示在矩形中心。