Пошаговое руководство. Добавление объекта D2D в проект MFC
В этом пошаговом руководстве показано, как добавить базовый объект Direct2D (D2D) в проект Visual C++, библиотеку классов Microsoft Foundation (MFC), а затем создать проект в приложение, которое печатает "Hello, World!" на градиентном фоне.
В пошаговом руководстве показано, как выполнить следующие задачи:
Создайте приложение MFC.
Создайте сплошную кисть и линейную градиентную кисть.
Измените кисть градиента таким образом, чтобы оно меняется соответствующим образом при изменении размера окна.
Реализуйте обработчик документа D2D.
Проверьте результаты.
Примечание.
Отображаемые на компьютере имена или расположения некоторых элементов пользовательского интерфейса Visual Studio могут отличаться от указанных в следующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Персонализация среды IDE.
Необходимые компоненты
Чтобы выполнить это пошаговое руководство, необходимо установить Visual Studio с рабочей нагрузкой C++ и дополнительным компонентом Visual C++ MFC для x86 и x64.
Создание приложения MFC
Используйте мастер приложений MFC для создания приложения MFC. См . пошаговое руководство. Использование новых элементов управления оболочки MFC для инструкций по открытию мастера для вашей версии Visual Studio.
В поле "Имя" введите MFCD2DWalkthrough. Выберите OK.
В мастере приложений 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!" должен отображаться в центре прямоугольника.