动态改变Slider背景色

jyoshou 2010-08-09 01:24:36
有多个Slider控件,我想显示当前被选中的Slider背景色为黄色,下面是我的代码,出现的问题是不能正常地显示,请各位大侠指点一下

BOOL CtestDlg::OnInitDialog()
m_brush.CreateSolidBrush(RGB(255,255,0));

HBRUSH CtestDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);

int nID = pWnd->GetDlgCtrlID();
if(nID == selectFlag)
return m_brush;
return hbr;
}

void CtestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
CSliderCtrl *pSlidCtrl;
int value;
int ctrlID = pScrollBar->GetDlgCtrlID();
pSlidCtrl = (CSliderCtrl *)GetDlgItem(ctrlID);
value = pSlidCtrl->GetPos();
SetDlgItemInt((IDC_EDIT1 + (ctrlID - IDC_SLIDER1)), value);
selectFlag = ctrlID;
//pSlidCtrl->Invalidate();
CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
...全文
329 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyoshou 2010-08-12
  • 打赏
  • 举报
回复
我也感觉可能是更新不及时造成的,但又不知道该如果改变这种效果,如果我只针对当前焦点的控件更新颜色,则一点问题都没有,不知道是变量传递引起的时间差问题,还是怎样,请各位给点提示
m_tornado 2010-08-09
  • 打赏
  • 举报
回复
是不是更新不及时?
jyoshou 2010-08-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 hurryboylqs 的回复:]

自己关联一个变量
这样判断
if(pWnd == &m_Slider)
return (HBRUSH)m_brush;
[/Quote]

我上面也是根据OnHScroll选中的ctrlID才返回,显示效果不正常,对于第一个slider选中时颜色有,选第二个时就没有,如果此时点击其他控件时,第二个slider的颜色倒是出现了
hurryboylqs 2010-08-09
  • 打赏
  • 举报
回复
自己关联一个变量
这样判断
if(pWnd == &m_Slider)
return (HBRUSH)m_brush;

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧