我要让2个进度条显示不同文字,网上下了个源代码,是让一个进度条显示文字。我用指针,结果没任何显示。请高手帮帮忙。红色部分是我增加的代码。
void CTextProgressCtrl::OnPaint()
{
if (m_nMin >= m_nMax)
return;
CRect *Rect1=(CRect*)GetDlgItem(IDC_PROGRESS1);
CRect *Rect2=(CRect*)GetDlgItem(IDC_PROGRESS1);
CRect LeftRect, RightRect,ClientRect;
//源代码是GetClientRect(ClientRect);
GetClientRect(Rect1);
GetClientRect(Rect2); 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 = RightRect =Rect1=Rect2;
//获取进度的大小
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;
// 源代码是rgn.CreateRectRgn(ClientRect.left, ClientRect.top,ClientRect.right, ClientRect.bottom);
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(str,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn2.DeleteObject();
}
}
void CTextProgressCtrl::OnPaint()
{
if (m_nMin >= m_nMax)
return;
CRect *Rect1=(CRect*)GetDlgItem(IDC_PROGRESS1);
CRect *Rect2=(CRect*)GetDlgItem(IDC_PROGRESS1);
CRect LeftRect, RightRect,ClientRect;
//源代码是GetClientRect(ClientRect);
GetClientRect(Rect1);
GetClientRect(Rect2); 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 = RightRect =Rect1=Rect2;
//获取进度的大小
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;
// 源代码是rgn.CreateRectRgn(ClientRect.left, ClientRect.top,ClientRect.right, ClientRect.bottom);
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(str,Rect2, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
rgn2.DeleteObject();
}
}
解决方案 »
- 显示对话框是改变其样式的问题!!求指教
- vc6不支持很多新的窗口样式,应该怎样补救?望大侠指点一下!
- VC2005这个error C2440: '=' : cannot convert from 'unsigned short [256]' to 'LPWSTR
- 中英文选择不同字体!**********************
- fackpear(云梦天竺)来拿分,麻烦斑竹不要删
- 使用流拖放
- 能否将位图(BITMAP、DIB)转为Metafile图形格式? 求原代码, 200分相送
- 有哪位见过这样的错误:fatal error LNK1136:invalid or corrupt file.?
- 如何找出错误
- 关于ODBC数据库的一个问题
- 很奇怪的问题,在执行过程中用return FALSE来中断EnumChildWindows() API函数..
- 如何简单的取一下网页数据?
CRect *Rect2=(CRect*)GetDlgItem(IDC_PROGRESS2);
==这算什么写法?GetDlgItem返回的是CWnd*类型啊,你居然转换成CRect*??????
CWnd *pWnd2=(CWnd*)GetDlgItem(IDC_PROGRESS1);
CRect LeftRect, RightRect,ClientRect;
//源代码是GetClientRect(ClientRect);
CRect rc1,rc2;
GetClientRect(&rc1);
GetClientRect(&rc2);
CRect *Rect1 = &rc1;
CRect *Rect2 = &rc2;
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; pWnd1->GetClientRect(&rc1);
pWnd2->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(ClientRect.left, ClientRect.top,ClientRect.right, ClientRect.bottom);
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();
}
}