带渐变背景和可变色进度条的对话框






2.59/5 (24投票s)
2004 年 8 月 3 日
1分钟阅读

120122

5056
一个允许用户更改进度条颜色的基于对话框的小型应用程序。
引言
本文描述了一个允许更改进度条颜色的非常小的基于对话框的应用程序;使用 PBM_SETBARCOLOR
更改条的颜色,并使用 PBM_SETBKCOLOR
更改进度条的背景颜色。对话框填充有渐变色背景。该应用程序可用于创建具有渐变背景和彩色进度条的精美安装应用程序,以显示安装进度。
请查看以下代码...
BOOL CProgDlgDlg::OnEraseBkgnd(CDC* pDC) { CPen myPen[60] ; int i ; CRect rect ; for (i = 0 ; i <= 60 ; i++) myPen[i].CreatePen(PS_SOLID, 1, RGB ((i * 4),0,0)); CPen *oldPen = pDC->SelectObject(&myPen[0]) ; GetClientRect(&rect); for(i = 0 ; i <= rect.bottom;) { pDC->MoveTo(0, i); pDC->LineTo(rect.right, i); i++; pDC->SelectObject (&myPen[i * 64 / rect.bottom]); } pDC->SelectObject(oldPen) ; return TRUE ; }
如你所见,这里没有神奇的技巧,只是使用颜色从对话框顶部到底部绘制线条。首先,我们创建了一个 CPen
数组。我让我的代码通过一个 for
循环来创建具有特定颜色的纯色画笔。(你可以使用所有三种颜色来创建渐变效果)。使用 GetClientRect()
,获取了对话框的区域。使用 CDC 指针,我们从上到下绘制线条。当我们向下移动循环时,颜色的强度增加,从而产生渐变效果。
要更改进度条的颜色
void CProgDlgDlg::OnBtnColor() { CColorDialog dlg; if(dlg.DoModal() == IDOK) { color = dlg.GetColor(); m_myProgress.SendMessage(PBM_SETBARCOLOR, 0, color); } }
使用 CColorDialog
的对象调用标准颜色对话框。检查用户是否按下了“确定”或“取消”按钮。使用 GetColor()
在 COLORREF
对象中提取颜色。只需使用 SendMessage
发送消息到进度条,消息作为第一个参数,所选颜色作为最后一个参数即可。
就是这样,你已经准备好了一个具有渐变色对话框和可变色进度条了。