QQ登录

只需一步,快速开始

109上位机VC MFC设备上下文CDC画山树叶

[ 复制链接 ]


109上位机VC MFC设备上下文CDC画山树叶

109上位机VC MFC设备上下文CDC画山树叶
109上位机VC MFC设备上下文CDC画山树叶
功能展示
设备上下文CDC可以画线,画圆,画曲线,还可以画山,画水,画树,我们当前例程通过CDC类的SetPixel()函数实现树叶及山峰的绘制,效果如图;
要点提示
山还是水的绘制都是通过逐点绘制的,我们当前实现了32000个点用于绘制山与叶,再结合SetPixel ()函数将每个点逐一描绘到窗口上;
实现功能
1.新建基于对话框的应用程序
2.定义一个点的数组变量  CPointm_PointArray[32000];
自定义一个函数  void IniPointArray(UINT nIndex=0);用于点数组的赋值,
自定义一个函数  void DrawPointArray(UINT nIndex=0);用于将点数组绘制到窗口中
3.添加两按钮,实现山与树叶的绘制,四个函数代码如下
  1. void CGkbc8Dlg::OnDraw() { IniPointArray(1); DrawPointArray(1);
  2. }
  3. void CGkbc8Dlg::OnButton1() { IniPointArray(); DrawPointArray();
  4. }
  5. void CGkbc8Dlg::DrawPointArray(UINT nIndex)
  6. {
  7.         COLORREF color=RGB(0,0,182);
  8.         if(0 == nIndex)//页
  9.                 color = RGB(0,255,0);
  10.         if(1 == nIndex)
  11.                 color = RGB(182,182,182);
  12.         CDC *pDC = GetDC();
  13.         for(int i=0;i<32000;i++)
  14.         {
  15.                 if(m_PointArray[i].x != -65535)
  16.                         pDC->SetPixel(m_PointArray[i].x,m_PointArray[i].y,color);
  17.         }
  18.         ReleaseDC(pDC);
  19. }
复制代码
  1. void CGkbc8Dlg::IniPointArray(UINT nIndex)
  2. {
  3.         double  a[],b[8],c[8],d[8],e[8],f[8],p[8];
  4.         int stepx ,stepy ;
  5.         if(0 == nIndex)//页
  6.         {
  7.                 stepx=15;         stepy=15;
  8.                 a[0]=0.0;a[1]=0.85;a[2]=0.2;a[3]=-0.15;
  9.                 b[0]=0;b[1]=0.04;b[2]=-0.26;b[3]=0.28;
  10.                 c[0]=0;c[1]=-0.04;c[2]=0.23;c[3]=0.26;
  11.                 d[0]=0.16;d[1]=0.85;d[2]=0.22;d[3]=0.24;
  12.                 e[0]=0;e[1]=0;e[2]=0;e[3]=0;
  13.                 f[0]=0;f[1]=1.6;f[2]=1.6;f[3]=0.44;
  14.                 p[0]=0.01;p[1]=0.85;p[2]=0.07;p[3]=0.07;
  15.         }
  16.         else if(1 == nIndex)//山
  17.         {
  18.                 stepx=3;         stepy=3;
  19.                 a[0]=0.7;a[1]=0.5;a[2]=-0.4;a[3]=-0.5;
  20.                 b[0]=0.0;b[1]=0;b[2]=0;b[3]=0;
  21.                 c[0]=0;c[1]=0;c[2]=1;c[3]=0;
  22.                 d[0]=0.8;d[1]=0.5;d[2]=0.4;d[3]=0.5;
  23.                 e[0]=0;e[1]=2;e[2]=0;e[3]=2;
  24.                 f[0]=0;f[1]=0;f[2]=1;f[3]=1;
  25.                 p[0]=0.25;p[1]=0.25;p[2]=0.25;p[3]=0.25;
  26.         }
  27.         else
  28.                 return;

  29.         
  30.         int nTotalSteps=32000;
  31.         int i,k;
  32.         int N =4;
  33.         int MaxY=400;
  34.         for(i=1;i<N;i++)
  35.         {
  36.                 p[i]=p[i]+p[i-1];
  37.         }
  38.         
复制代码
  1. double x=0,y=0;
  2.         float xj,m;
  3.         srand(unsigned(time(NULL)));
  4.         for(i=0;i<nTotalSteps;i++)
  5.         {         
  6.                 m=float(rand());
  7.                 xj=float(m/RAND_MAX);
  8.                 if(xj<=p[0]) k=0;
  9.                 if((xj>p[0])&&(xj<=p[1])) k=1;
  10.                 if((xj>p[1])&&(xj<=p[2])) k=2;
  11.                 if((xj>p[2])&&(xj<=p[3])) k=3;
  12.                 if((xj>p[3])&&(xj<=p[4]))k=4;
  13.                 if((xj>p[4])&&(xj<=p[5])) k=5;
  14.                 if((xj>p[5])&&(xj<=p[6]))k=6;
  15.                 if((xj>p[6]) &&(xj<=p[7]))k=7;

  16.                 x=a[k]*x+b[k]*y+e[k];
  17.                 y=c[k]*x+d[k]*y+f[k];
  18.                 if(i>10)
  19.                 {
  20.                         m_PointArray[i].x = int(MaxY*x/stepx+MaxY/2 );
  21.                         m_PointArray[i].y = MaxY-int(MaxY*y/stepy+30)-100;
  22.                 }
  23.                 else
  24.                 {
  25.                         m_PointArray[i].x=m_PointArray[i].y=-65535;//后面调用进行判断用
  26.                 }        
  27.         }
  28. }

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

请点击此处下载

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

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

文件名称:109.上位机VC MFC设备上下文CDC画山树叶.rar 
文件大小:134.21 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

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

  

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

  

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



回复

使用道具 举报

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