进度条上显示文字?
我要两个进度条上显示不同的文字,在网上找了个进度条类TextProgressCtrl,很好用,能让一个进度条显示文字。我增加了一个进度条,代码作了以下修改,但是没有任何显示,不但没有文字显示,连进度显示都没了,请高手们帮帮忙,帮我找找问题出在哪里。
void CTextProgressCtrl::OnPaint()
{
if (m_nMin >= m_nMax)
return;
// CWnd *pWnd1=(CWnd*)GetDlgItem(IDC_PROGRESS1);//这样获取的指针我不知道怎么用?
// CWnd *pWnd2=(CWnd*)GetDlgItem(IDC_PROGRESS2);//这样获取的指针我不知道怎么用?
CRect LeftRect, RightRect,ClientRect;
CRect rc1,rc2;
// GetClientRect(&rc1);//这样的话两个进度条显示一样的文字
// GetClientRect(&rc2);//这样的话两个进度条显示一样的文字
GetDlgItem(IDC_PROGRESS1)->GetClientRect(&rc1);//这样的话没任何显示
GetDlgItem(IDC_PROGRESS2)->GetClientRect(&rc2);//这样的话没任何显示
CRect *Rect1 = &rc1;
CRect *Rect2 = &rc2;
double Fraction = (double)(m_nPos - m_nMin) / ((double)(m_nMax - m_nMin));
CPaintDC PaintDC(this); // device context for painting
CMemDC dc(&PaintDC);
LeftRect = RightRect =ClientRect;
//获取进度的大小
LeftRect.right = LeftRect.left + (int)((LeftRect.right - LeftRect.left)*Fraction);
dc.FillSolidRect(LeftRect, m_colFore);
RightRect.left = LeftRect.right;
dc.FillSolidRect(RightRect, m_colBk);
UpdateData(FALSE);
if (m_bShowText)
{
CString str,str2;
if (m_strText.GetLength())
str = m_strText;
else
str.Format(_T("高度%d米"),_ttoi(ni1));
str2.Format(_T("重量%d吨"),_ttoi(ni2));
dc.SetBkMode(TRANSPARENT);
CRgn rgn1,rgn2;
rgn1.CreateRectRgn(Rect1->left,Rect1->top, Rect1->right, Rect1->bottom);
dc.SelectClipRgn(&rgn1);
//设置颜色
dc.SetTextColor(m_colTextBk);
//第一个进度条显示文字
dc.DrawText(str,Rect1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn1.DeleteObject();
rgn2.CreateRectRgn(Rect2->left,Rect2->top, Rect2->right, Rect2->bottom);
dc.SelectClipRgn(&rgn2);
//设置颜色
dc.SetTextColor(m_colTextBk);
//第二个进度条显示文字
dc.DrawText(str2,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn2.DeleteObject();
}
}
void CTextProgressCtrl::OnPaint()
{
if (m_nMin >= m_nMax)
return;
// CWnd *pWnd1=(CWnd*)GetDlgItem(IDC_PROGRESS1);//这样获取的指针我不知道怎么用?
// CWnd *pWnd2=(CWnd*)GetDlgItem(IDC_PROGRESS2);//这样获取的指针我不知道怎么用?
CRect LeftRect, RightRect,ClientRect;
CRect rc1,rc2;
// GetClientRect(&rc1);//这样的话两个进度条显示一样的文字
// GetClientRect(&rc2);//这样的话两个进度条显示一样的文字
GetDlgItem(IDC_PROGRESS1)->GetClientRect(&rc1);//这样的话没任何显示
GetDlgItem(IDC_PROGRESS2)->GetClientRect(&rc2);//这样的话没任何显示
CRect *Rect1 = &rc1;
CRect *Rect2 = &rc2;
double Fraction = (double)(m_nPos - m_nMin) / ((double)(m_nMax - m_nMin));
CPaintDC PaintDC(this); // device context for painting
CMemDC dc(&PaintDC);
LeftRect = RightRect =ClientRect;
//获取进度的大小
LeftRect.right = LeftRect.left + (int)((LeftRect.right - LeftRect.left)*Fraction);
dc.FillSolidRect(LeftRect, m_colFore);
RightRect.left = LeftRect.right;
dc.FillSolidRect(RightRect, m_colBk);
UpdateData(FALSE);
if (m_bShowText)
{
CString str,str2;
if (m_strText.GetLength())
str = m_strText;
else
str.Format(_T("高度%d米"),_ttoi(ni1));
str2.Format(_T("重量%d吨"),_ttoi(ni2));
dc.SetBkMode(TRANSPARENT);
CRgn rgn1,rgn2;
rgn1.CreateRectRgn(Rect1->left,Rect1->top, Rect1->right, Rect1->bottom);
dc.SelectClipRgn(&rgn1);
//设置颜色
dc.SetTextColor(m_colTextBk);
//第一个进度条显示文字
dc.DrawText(str,Rect1, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn1.DeleteObject();
rgn2.CreateRectRgn(Rect2->left,Rect2->top, Rect2->right, Rect2->bottom);
dc.SelectClipRgn(&rgn2);
//设置颜色
dc.SetTextColor(m_colTextBk);
//第二个进度条显示文字
dc.DrawText(str2,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn2.DeleteObject();
}
}
...全文
相关推荐
Android实现百分比下载进度条效果
现在很多APP中都会集成下载功能,所以有一个方便好看又实用的进度条来展示下载进度很有必要,也能提高用户体验,在这里我就把项目里的下载进度条抽取出来分享给大家,话不多说,先看效果图: 这个进度条是自定义的一个View,其中有一个自定义属性就是百分比文字的大小(也可以把那两条显示颜色的进度条自定义属性,这里就没有实现,在代码里面写的)。 先说说实现原理: 1:由于自定义了属性,所以先获取属性的值。 2:绘制底色那条灰色的线。 3:根据传入的数据计算当前百分比,然后绘制那条橘黄色的线。 4:再在橘黄色线后面把百分比的文字绘制出来就OK了。 现在来看看代码: 一:属性设置attrs.xml文件
jQuery进度条图片轮播代码
jQuery进度条图片轮播代码基于jquery-1.11.1.min.js制作,自动图片轮播,左右箭头控制图片显示,图片匹配文字轮播代码。
C# progressBar进度条绘制文字显示百分比
C# progressBar进度条绘制文字显示百分比
MFC带百分比文字显示的进度条
在VC中也有进度条的控件,但它不能显示文字。今有一CProgressCtrl类的派生类CTextProgressCtrl就有完成这样的工作。
android 竖直自定义进度条 带文字竖直进度条 类似电量显示
通过在style文件中进行配置,实现了带文字竖直进度条 类似电量显示的功能。


界面
