MFC问题:进度条和滑块同时使用,滑块用来改变背景色。使用UpdateData改变进度条上的静态控件时报错。
给一个单文档程序添加一个对话框资源。对话框中包含一个进度条,表示进度的静态控件,控制进度条增加的按钮以及一个用来改变背景色的滑动条。编译通过。运行时,点击前进按钮,程序会...
给一个单文档程序添加一个对话框资源。对话框中包含一个进度条,表示进度的静态控件,控制进度条增加的按钮以及一个用来改变背景色的滑动条。编译通过。运行时,点击前进按钮,程序会跳出如下图所示的错误警告。将代码换成SetDlgItemText()就不会跳出错误。我想知道这是为什么。
以下放部分修改过的代码。
BOOL MyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_ProgressCtrl.SetRange(0,100);
m_ProgressCtrl.SetPos(0);
m_ProgressCtrl.SetStep(5);
m_SliderCtrl.SetRange(0,255);
m_strSlider=192;
UpdateData(false);
return TRUE;
}
void MyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_ProgressCtrl.StepIt();
UpdateProgressText();
}
void MyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
Invalidate();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void MyDlg::UpdateProgressText()
{
int nPos=m_ProgressCtrl.GetPos();
int nUp,nLow;
m_ProgressCtrl.GetRange(nLow,nUp);
m_strSTATIC1.Format("%4.0f%%",(float)nPos/(nUp-nLow)*100);
UpdateData(0);//就是执行到这一步报错。
}
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here
UpdateData(true);
COLORREF color=RGB(255,m_strSlider,255);
m_Brush.Detach();
m_Brush.CreateSolidBrush(color);
pDC->SetBkColor(color);
return (HBRUSH)m_Brush;
}
如需要源代码请留下邮箱。这个程序比较简单,相信看看也知道在干什么。苦于目前为止老师和一些群内人士无法解答,渴求各路高手。 展开
以下放部分修改过的代码。
BOOL MyDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
m_ProgressCtrl.SetRange(0,100);
m_ProgressCtrl.SetPos(0);
m_ProgressCtrl.SetStep(5);
m_SliderCtrl.SetRange(0,255);
m_strSlider=192;
UpdateData(false);
return TRUE;
}
void MyDlg::OnButton1()
{
// TODO: Add your control notification handler code here
m_ProgressCtrl.StepIt();
UpdateProgressText();
}
void MyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: Add your message handler code here and/or call default
Invalidate();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void MyDlg::UpdateProgressText()
{
int nPos=m_ProgressCtrl.GetPos();
int nUp,nLow;
m_ProgressCtrl.GetRange(nLow,nUp);
m_strSTATIC1.Format("%4.0f%%",(float)nPos/(nUp-nLow)*100);
UpdateData(0);//就是执行到这一步报错。
}
HBRUSH MyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
// TODO: Change any attributes of the DC here
UpdateData(true);
COLORREF color=RGB(255,m_strSlider,255);
m_Brush.Detach();
m_Brush.CreateSolidBrush(color);
pDC->SetBkColor(color);
return (HBRUSH)m_Brush;
}
如需要源代码请留下邮箱。这个程序比较简单,相信看看也知道在干什么。苦于目前为止老师和一些群内人士无法解答,渴求各路高手。 展开
3个回答
展开全部
刚看了,就是SetPor(int pos);该函数可以定位Slider的任意位置。首先要用SetRange()实现Slider的最大值与最小值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
刚看了,就是SetPor(int pos);该函数可以定位Slider的任意位置。首先要用SetRange()实现Slider的最大值与最小值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
zhou.gaby@gmail.com尽快发吧,我帮你查这个问题
更多追问追答
追问
已发。
追答
问题给你查到了,见邮件里
另外,多给我加点分哦~~~
对了,忘了说。你们老师比较菜。。。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询