VC开发的类似FlashGet的下载进度条
2018-03-03 14:40
288 查看
大家可能都觉得FlashGet的下载进度条很酷是吧?想不想开发一个呢?我自己用VC实现了一个,下面是截图:
代码下载地址:http://download.csdn.net/download/toshiba689/10261734
下面讲一下实现思路。
首先,定义几个变量:typedef struct{
int start;
int end;
}BLUE;
BLUE b[3];
创建CImageList和添加“珠子”的代码如下: imagelist.Create(12,12,0,4,4);
CBitmap blue;
CBitmap gray;
CBitmap red;
blue.LoadBitmap(IDB_BLUE);
gray.LoadBitmap(IDB_GRAY);
red.LoadBitmap(IDB_RED);
imagelist.Add(&blue,CLR_NONE);
imagelist.Add(&gray,CLR_NONE);
imagelist.Add(&red,CLR_NONE);程序中显示“珠子”的区域是一个CScrollView视图,需要重载它的OnDraw函数来实现绘图:void CRollView::OnDraw(CDC* pDC)
{
CRollDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rcClient;
GetClientRect(rcClient);
nColCount = rcClient.Width()/m_nCellWidth;
nRowCount = m_nCount/nColCount+1;
m_nViewHeight = nRowCount*m_nCellHeight;
CBrush brush(::GetSysColor( COLOR_BTNFACE));
pDC->FillRect(&rcClient, &brush);
pDC->SetBkMode(TRANSPARENT);
//dc.SetBkColor(RGB(255,0,0));
CRect rect;
pDC->GetClipBox(&rect);
//TRACE("top:%d left:%d width:%d height:%d\n",rect.top,rect.left,rect.Width(),rect.Height());
for(int i=0;i<=m_nCount;i++){
int x= i%nColCount;
int y = i/nColCount;
DrawBrick(pDC,x,y,0);
}
int i, j;
for(i=0;i<3;i++){
for(j=b[i].start;j<b[i].end;j++){
int x= j%nColCount;
int y = j/nColCount;
DrawBrick(pDC,x,y,1);
}
DrawBrick(pDC,j%nColCount,j/nColCount,2);
}
/*
dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(),
&m_MemDC,
0, 0,
SRCCOPY);
*/
}
{
CClientDC dc(this);
OnPrepareDC(&dc);
for(int i=0;i<3;i++){
int x= b[i].end %nColCount;
int y = b[i].end/nColCount;
DrawBrick(&dc,x,y,1);
b[i].end +=1;
x= b[i].end %nColCount;
y = b[i].end/nColCount;
DrawBrick(&dc,x,y,2);
}
//Invalidate();
CScrollView::OnTimer(nIDEvent);
}
代码下载地址:http://download.csdn.net/download/toshiba689/10261734
下面讲一下实现思路。
首先,定义几个变量:typedef struct{
int start;
int end;
}BLUE;
BLUE b[3];
CImageList imagelist;其中BLUE结构体表示一个连续颜色进度条的起始点和结束点坐标,坐标是一个索引值,由0开始。上面定义了一个数组b[3],表示将进度条分成三段,后面会赋值这个数组,设置每一段的开始和结束坐标。还有我定义了一个CImageList变量,这个是用来存储珠子形状的图标,我的程序中会向这个imagelist里面插入3种不同颜色的“珠子”。
创建CImageList和添加“珠子”的代码如下: imagelist.Create(12,12,0,4,4);
CBitmap blue;
CBitmap gray;
CBitmap red;
blue.LoadBitmap(IDB_BLUE);
gray.LoadBitmap(IDB_GRAY);
red.LoadBitmap(IDB_RED);
imagelist.Add(&blue,CLR_NONE);
imagelist.Add(&gray,CLR_NONE);
imagelist.Add(&red,CLR_NONE);程序中显示“珠子”的区域是一个CScrollView视图,需要重载它的OnDraw函数来实现绘图:void CRollView::OnDraw(CDC* pDC)
{
CRollDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rcClient;
GetClientRect(rcClient);
nColCount = rcClient.Width()/m_nCellWidth;
nRowCount = m_nCount/nColCount+1;
m_nViewHeight = nRowCount*m_nCellHeight;
CBrush brush(::GetSysColor( COLOR_BTNFACE));
pDC->FillRect(&rcClient, &brush);
pDC->SetBkMode(TRANSPARENT);
//dc.SetBkColor(RGB(255,0,0));
CRect rect;
pDC->GetClipBox(&rect);
//TRACE("top:%d left:%d width:%d height:%d\n",rect.top,rect.left,rect.Width(),rect.Height());
for(int i=0;i<=m_nCount;i++){
int x= i%nColCount;
int y = i/nColCount;
DrawBrick(pDC,x,y,0);
}
int i, j;
for(i=0;i<3;i++){
for(j=b[i].start;j<b[i].end;j++){
int x= j%nColCount;
int y = j/nColCount;
DrawBrick(pDC,x,y,1);
}
DrawBrick(pDC,j%nColCount,j/nColCount,2);
}
/*
dc.BitBlt(0, 0, rcClient.Width(), rcClient.Height(),
&m_MemDC,
0, 0,
SRCCOPY);
*/
}
void CRollView::DrawBrick(CDC* pDC,int col,int row,int color) { if(color==1) imagelist.Draw(pDC,0,CPoint(col*m_nCellWidth,row*m_nCellHeight),ILD_TRANSPARENT); else if(color==0) imagelist.Draw(pDC,1,CPoint(col*m_nCellWidth,row*m_nCellHeight),ILD_TRANSPARENT); else imagelist.Draw(pDC,2,CPoint(col*m_nCellWidth,row*m_nCellHeight),ILD_TRANSPARENT); }还有,我的程序实现了一个自动滚动“珠子”的动画效果,通过在定时器中增加每段进度的末点坐标的值,这样每段珠子的长度就会不断变长了。OnTimer函数代码如下:void CRollView::OnTimer(UINT nIDEvent)
{
CClientDC dc(this);
OnPrepareDC(&dc);
for(int i=0;i<3;i++){
int x= b[i].end %nColCount;
int y = b[i].end/nColCount;
DrawBrick(&dc,x,y,1);
b[i].end +=1;
x= b[i].end %nColCount;
y = b[i].end/nColCount;
DrawBrick(&dc,x,y,2);
}
//Invalidate();
CScrollView::OnTimer(nIDEvent);
}
相关文章推荐
- VC界面开发组件Xtreme Toolkit Pro全新发布v17.0.0|附下载
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(不能知道下载进度)
- 日常开发——Service, Notification显示下载进度
- Atitit 提升开发进度大方法--高频功能与步骤的优化 类似性能优化
- ios开发视频播放后台下载功能实现 :1,ios播放视频 ,包含基于AVPlayer播放器,2,实现下载,iOS后台下载(多任务同时下载,单任务下载,下载进度,下载百分比,文件大小,下载状态)(真机调试功能正常)
- Android开发之文件下载(通知栏中显示进度条,状态信息等)
- Atitit 提升开发进度大方法--高频功能与步骤的优化 类似性能优化
- 将QT开发的界面程序封装成DLL,在VC中成功调用(必须有消息循环,所以使用了QTWinmigrate,附CSDN可下载的Demo)
- 【iOS开发-网络】使用NSURLSessionDownloadTask下载任务(有下载进度)
- iOS开发之网络编程--4、NSURLSessionDataTask实现文件下载(离线断点续传下载) <进度值显示优化>
- 一个类似FlashGet的c#开源下载工具
- VC++/MFC(VC6)开发技术精品学习资料下载汇总
- 国外类似VC的emule下载网站网址大全
- FlashGet下载风格进度条
- Windows客户端开发--URLDownloadToFile下载文件进度条
- 摘录的WinForm Control 开发5,WinForm 开发:FlashGetFormDemos ,类似FlashGet的悬浮窗
- iOS开发之使用CALayer封装下载进度条
- Debian下成功编译Code::Blocks-Linux下类似M$VC的集成开发环境
- VC下载文件显示进度条
- Windows客户端开发--URLDownloadToFile下载文件进度条