QQ登录

只需一步,快速开始

108上位机VC MFC设备上下文件CDC绘制三维矩形

[ 复制链接 ]

108上位机VC MFC设备上下文件CDC绘制三维矩形

108上位机VC MFC设备上下文件CDC绘制三维矩形

108上位机VC MFC设备上下文件CDC绘制三维矩形

功能展示

设备上下文件CDC绘制三维矩形在多媒体编辑会有用到,但CDC没有现成的函数绘制三维图形,我们当前例程通过 MoveTo(), LineTo()函数实现三维矩形绘制,效果如图
要点提示
绘制图形前我们得设置它默认的原点,不然绘制的图形部份不可见,设置原点我可以用CDC的SetViewportOrg()设置,它跟随一个坐标点参数,我们可以传入窗口的中心点进行便可;





实现功能
1.新建基于对话框的应用程序
2.拖拽一图片控件,用于绘制矩形,设置ID为IDC_RECT
添加四编辑框关联UINT类型变量,用于设置矩形的长宽高角度,分别为 UINT m_nWidth;
UINT  m_nHeight; UINT m_nLength; UINT m_nAngle;

3.添加自定义函数DrawStereoRect()现添加四个编辑框的EN_CHANGE消息响应函数,下面是五个函数的函数体
  1. void CGkbc8Dlg::OnChangeEdit1() //width
  2. {
  3. DrawStereoRect();
  4. }
  5. void CGkbc8Dlg::OnChangeEdit4() //height
  6. {
  7. DrawStereoRect();
  8. }
  9. void CGkbc8Dlg::OnChangeEdit3() //length
  10. {
  11. DrawStereoRect();
  12. }
  13. void CGkbc8Dlg::OnChangeEdit2() //angle
  14. {
  15. DrawStereoRect();
  16. }
复制代码
  1. void CGkbc8Dlg::DrawStereoRect()
  2. {
  3.         UpdateData();
  4.         //
  5.         CDC* pDC;
  6.         pDC = GetDlgItem(IDC_RECT)->GetDC();        
  7.         CRect rc,rect;
  8.         GetDlgItem(IDC_RECT)->GetClientRect(rect);
  9.         GetDlgItem(IDC_RECT)->GetWindowRect(rc);
  10.         pDC->FillRect(rect,NULL);
  11.         //取出中心点
  12.         CPoint center;   
  13.         center.x=rc.Width()/2;
  14.         center.y=rc.Height()/2;
  15.         pDC->SetViewportOrg(center);


  16.         CPoint LTop,LBottom,RTop,RBottom;
  17.         LTop.x=1-m_nLength/2;
  18.         LTop.y=1-m_nHeight/2;
  19.         RTop.x=m_nLength/2;
  20.         RTop.y=1-m_nHeight/2;
  21.         LBottom.x=1-m_nLength/2;
  22.         LBottom.y=m_nHeight/2;
  23.         RBottom.x=m_nLength/2;
  24.         RBottom.y=m_nHeight/2;
  25.         CPen pen(PS_SOLID,1,RGB(0,0,0));
  26.         CPen DOTPen; //虚线
  27.         DOTPen.CreatePen(PS_DOT,1,RGB(0,0,0));
  28.         pDC->SelectObject(&pen);
  29.         //画正面矩形
  30.         pDC->Rectangle(LTop.x,LTop.y,RBottom.x,RBottom.y);
  31.         CPoint LeftTop,RightTop;
  32.         LeftTop.x=(long)(LTop.x+(cos(m_nAngle*PI/180)*m_nWidth));
  33.         LeftTop.y=(long)(LTop.y-(sin(m_nAngle*PI/180)*m_nWidth));
  34.         RightTop.x=LeftTop.x+m_nLength;
  35.         RightTop.y=LeftTop.y;
  36.         pDC->MoveTo(LTop);
  37.         pDC->LineTo(LeftTop);
  38.         pDC->LineTo(RightTop);
  39.         
复制代码
  1. pDC->LineTo(RTop);
  2.         CPoint Other,DotPoint;
  3.         DotPoint.x=LeftTop.x ;
  4.         DotPoint.y=LeftTop.y+m_nHeight;
  5.         pDC->MoveTo(RightTop);
  6.         if(m_nAngle<89)
  7.         {
  8.                 pDC->SelectObject(&pen);
  9.                 Other.x=RightTop.x;
  10.                 Other.y=RightTop.y+m_nHeight;
  11.                 pDC->LineTo(Other);
  12.                 pDC->LineTo(RBottom);
  13.                 pDC->SelectObject(&DOTPen);
  14.                 pDC->MoveTo(LeftTop);
  15.                 pDC->LineTo(DotPoint);
  16.                 pDC->LineTo(LBottom);
  17.         }
  18.         else
  19.         {        
  20.                 pDC->SelectObject(&DOTPen);
  21.                 Other.x=RightTop.x;
  22.                 Other.y=RightTop.y+m_nHeight;
  23.                 pDC->LineTo(Other);
  24.                 pDC->LineTo(RBottom);
  25.                 pDC->SelectObject(&pen);
  26.                 pDC->MoveTo(LeftTop);
  27.                 pDC->LineTo(DotPoint);
  28.                 pDC->LineTo(LBottom);
  29.         }
  30.         pDC->SelectObject(&DOTPen);
  31.         pDC->MoveTo(DotPoint);
  32.         pDC->LineTo(Other);
  33. }

  34. <div style="text-align: center;"><span style="font-size: xx-large; line-height: 1.5;">我们来演示实现过程</span></div>
复制代码

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:108.上位机VC MFC设备上下文件CDC绘制三维矩形.rar 
文件大小:135.18 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!




回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索