Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2096178
  • 博文数量: 909
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 12260
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-06 20:50
文章分类

全部博文(909)

文章存档

2008年(909)

我的朋友

分类:

2008-05-06 22:07:03

一起学习
一个简单的工控管道控件

作者:张辉

下载本文配套源代码

一、本人一直从事工控行业控制软件编程,经常要模拟物料传输过程,为了使效果更加生动,故借鉴VC知识库(VCKBASE.COM)中高人的一些代码,做了一个简单的控件,拿出来和大家一起分享。不足之处还请各位指点。

二、代码比较简单主要的部分是画管道,代码如下:

void CMultiAxtiveX1Ctrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)

{

      CBrush brBk[64];	//创建画刷



      int nWidth = rcBounds.Width(); 

      int nHeight = rcBounds.Height();



      CRect rct;



      int j=0;



      if (m_ColorR>255 ||m_ColorR<0)	//合理化m_ColorR值

      		m_ColorR=255;

      for (int i = 0; i < 64; i   )//设置画刷颜色

      {

      		if (i<32)

      			brBk[i].CreateSolidBrush(RGB(m_ColorR - (32-i % 32),

							m_ColorR - (32-i % 32),

							100));

      		else

      			brBk[i].CreateSolidBrush(RGB(m_ColorR - (i % 32),

							m_ColorR - (i % 32),

							100));

      }



      //画渐变 



      for (i = rcBounds.top; i <= nHeight   2; i   ) 

      {

      		rct.SetRect(rcBounds.left, i,nWidth, i   1);

      		pdc->FillRect(&rct, &brBk[((i * 63) / nHeight)]);

      }



      for( j=0;j<10;j  )

      {

      		rct.SetRect(rcBounds.left m_grid[j]*nWidth/40, rcBounds.top , 

      		rcBounds.left m_grid[j]*nWidth/40 nWidth/40, nHeight );



      		pdc->FillRect(&rct, CBrush::FromHandle((HBRUSH) 

      		GetStockObject(WHITE_BRUSH)));

      } 



      for (i = 0; i < 64; i   )

      		brBk[i].DeleteObject();  

}


三、安装使用和应用
使用regsvr32 注册该控件(regsvr32 multiAxtiveX.ocx),注册后可在vb,vc,delphi等编程环境中使用。主要有2个属性一个方法:
1.direction控制流动方向,其值为0或1;
2.colorRed设定管道颜色,其值范围0-255;
3.flow方法驱动管道流动。
4.下面是控件在vb中使用的效果。


图一 VB中使用管道控件

四、结束语
利用vc这个强大的工具,我们可以做出更好更出色的控件。

下载本文示例代码


一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件一个简单的工控管道控件
阅读(257) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~