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(); }
四、结束语
利用vc这个强大的工具,我们可以做出更好更出色的控件。