Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2023643
  • 博文数量: 960
  • 博客积分: 52560
  • 博客等级: 大将
  • 技术积分: 13131
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-31 14:15
文章分类

全部博文(960)

文章存档

2011年(1)

2008年(959)

我的朋友

分类: C/C++

2008-08-01 17:02:09

下载本文示例代码
下载本文配套源代码

一、本人一直从事工控行业控制软件编程,经常要模拟物料传输过程,为了使效果更加生动,故借鉴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这个强大的工具,我们可以做出更好更出色的控件。

下载本文示例代码
阅读(315) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~