zoukankan      html  css  js  c++  java
  • Direct2D开发:向 MFC 项目添加 Direct2D 对象

    0X01 创建 MFC 应用程序:

    1. “文件”菜单上指向“新建”,然后单击“项目”
    2. “新建项目”对话框左窗格的“已安装的模板”下,展开“Visual C++”,然后选择“MFC”。 在中间窗格中,选择“MFC 应用程序”。 在“名称”框中键入 MFCD2DWalkthrough。 单击“确定”
    3. “MFC 应用程序向导”中,单击“完成”而不更改任何设置。

    创建一个纯色画笔和一个线性渐变画笔

    1. “解决方案资源管理器”中的“MFCD2DWalkthrough”项目的“头文件”文件夹中,打开 MFCD2DWalkthroughView.h。 将以下代码添加到 CMFCD2DWalkthroughView 类以创建三个数据变量。
      CD2DTextFormat* m_pTextFormat;  
      CD2DSolidColorBrush* m_pBlackBrush;  
      CD2DLinearGradientBrush* m_pLinearGradientBrush;

      保存文件并将其关闭。

    2. “源文件”文件夹中,打开 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)));  

      保存文件并将其关闭。

    0X02 修改渐变画笔,以便在调整窗口大小时它会相应更改:

    1. “项目”菜单上单击“类向导”

    2. “MFC 类向导”中的“类名”下,选择 CMFCD2DWalkthroughView

    3. “消息”选项卡上的“消息”框中,选择 WM_SIZE,然后单击“添加处理程序”。 此操作将 OnSize 消息处理程序添加到CMFCD2DWalkthroughView 类。

    4. “现有处理程序”框中,选择 OnSize。 单击“编辑代码”以显示 CMFCD2DWalkthroughView::OnSize 方法。 在此方法的末尾,添加以下代码。

      m_pLinearGradientBrush->SetEndPoint(CPoint(cx, cy));  

      保存文件并将其关闭。

    0X03 实现 Direct2D绘图处理程序:

    1. “项目”菜单上单击“类向导”

    2. “MFC 类向导”中的“类名”下,选择 CMFCD2DWalkthroughView

    3. “消息”选项卡上,单击“添加自定义消息”

    4. “添加自定义消息”对话框的“自定义 Windows 消息”框中,键入 AFX_WM_DRAW2D。 在“消息处理程序名称”框中,键入OnDraw2D。 选择“已注册的消息”选项,然后单击“确定”。 此操作将 AFX_WM_DRAW2D 消息的消息处理程序添加到CMFCD2DWalkthroughView 类。

    5. “现有处理程序”框中,选择 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;  
      }  

      保存文件并将其关闭。

     

    0X04 验证结果:

    1. 生成并运行应用程序。 它应有一个在您调整窗口大小时更改的渐变矩形。“Hello World!”应显示在矩形中央。

     

    参考链接:https://msdn.microsoft.com/zh-cn/library/gg482848.aspx

    赌上我的人生为梦想,即使是臭名远扬,也要我的名字响彻天堂
  • 相关阅读:
    图片圆角
    ios三张图片组合一张
    使用atomic一定是线程安全的吗?
    webservice异常
    Spring AOP中pointcut expression表达式解析 及匹配多个条件
    spring和mybatis的整合配置
    spring4配置文件详解
    MyBatis的接口式编程Demo
    关于中国电信天翼开放平台短信接口的一些使用
    HttpInvoker http请求工具类
  • 原文地址:https://www.cnblogs.com/ye-ming/p/6182349.html
Copyright © 2011-2022 走看看