Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8184713
  • 博文数量: 1227
  • 博客积分: 10026
  • 博客等级: 上将
  • 技术积分: 20273
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-16 12:40
文章分类

全部博文(1227)

文章存档

2010年(1)

2008年(1226)

我的朋友

分类: C/C++

2008-03-24 19:05:27

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

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