MFC中的绘图路径

话不多说,效果如下

 

 核心代码如下:


void CTextView::OnDraw(CDC* pDC)
{
  CTextDoc* pDoc = GetDocument();
  ASSERT_VALID(pDoc);
    if (!pDoc)
      return;

// TODO: 在此处为本机数据添加绘制代码

//在窗口中添加文本
  CString str("VC++深入编程");
  pDC->TextOut(50, 50, str);

  CSize size = pDC->GetTextExtent(str); //获取文本的大小范围,宽度和高度

//加载字符串资源
  CString str2;
  str2.LoadString(IDS_STRINGVC);
  pDC->TextOut(0, 200, str2);

CSize size2 = pDC->GetTextExtent(str2);

//将以下的范围添加到路径
  pDC->BeginPath();
  pDC->Rectangle(50, 50, 50 + size.cx, size.cy + 50);
  pDC->Rectangle(0, 200, size2.cx, size2.cy + 200);
  pDC->EndPath();

//对路径范围内进行互操作
  pDC->SelectClipPath(RGN_DIFF); //RGN_AND

  for (int i = 0; i < 500; i += 10)
  {
    pDC->MoveTo(0, i); //x竖坐标点(距离左边的点),y横坐标点(距离上面的点)
    pDC->LineTo(500, i);
    pDC->MoveTo(i, 0);
    pDC->LineTo(i, 500);
    Sleep(50);
  }
}

主要表现的是如何在格子线内不覆盖现有的文字或者只覆盖某一区域

这里就需要使用绘图路径

OnDraw()函数会在接收到WM_PAINT消息后进行重绘。

我们使用系统传进来的参数CDC设备描述表类,进行绘图路径的设置

通过GetTextExtent函数我们获取了字符在设备描述表中的宽度信息和高度信息,

pDC->BeginPath()函数开始路径的绘图,

pDC->EndPath()函数结束路径的绘图,

pDC->SelectClipPath(RGN_DIFF)函数设置了绘图的样式。

在路径内画的矩形就会被保存在设备描述表中,由于我们设置了绘画的样式,所以后面的方格线会当遇到绘图区域时断开绘图。

如果不设置呢,那么线条就是覆盖文字

posted @ 2020-10-30 15:08  大笨瓜  阅读(267)  评论(0)    收藏  举报