MFC中滑块拖动闪烁的问题

void CZdview::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
if (*pScrollBar == m_slider1)
{

      int pos11 = m_slider1.GetPos();
      SetDlgItemInt(IDC_EDIT1,pos11);
      m_slider1.SetPos(pos11);
    CMainFrame * pMainFrame=(CMainFrame *)AfxGetApp()->m_pMainWnd;//获取当前窗口指针,存到pMainFrame中
      pMainFrame->MoveArm(1,pos11);

   }
    我在滑块中加了调用指针这段程序后拖动滑块,滑块所在界面就会不停闪烁,是什么问题?该怎么解决啊?我是新手,大神们帮帮忙啊。

2个回答

获取到 Slider 的数值后,为什么还要再调用 m_slider1.SetPos(pos11);?
你没有修改它的数值。

xh156031883
xh156031883 要怎么增加打印?
5 年多之前 回复
91program
91program 回复xh156031883: 你先在 OnHScroll 中增加打印看看是不是这个函数被循环调用了?如果是,则解决的方法如我前一条回复。如果 Slider 的 pos11 数值未变化时,不调用 MoveArm 函数。
5 年多之前 回复
xh156031883
xh156031883 有没有什么办法解决闪烁问题啊?后面两句是不能注释掉的
5 年多之前 回复
91program
91program 回复xh156031883: 猜测是 MoveArm 的调用,又触发了 OnHScroll。你可以做判断,如果 pos11 的数值与上一次的比较?如果没有变化,则不再调用 MoveArm。
5 年多之前 回复
xh156031883
xh156031883 这是在mainfrm中建的自定义函数,上面的是它的程序。
5 年多之前 回复
xh156031883
xh156031883 回复91program: void CMainFrame::MoveArm(int arm, float data) { POSITION pos; pos=AfxGetApp()->GetFirstDocTemplatePosition(); CDocTemplate* pDocTemplate=AfxGetApp()->GetNextDocTemplate(pos); pos=pDocTemplate->GetFirstDocPosition(); while (pos != NULL) { CRcmanipulatorsimulationDoc * pDoc=(CRcmanipulatorsimulationDoc*)pDocTemplate->GetNextDoc(pos); pDoc->MoveArm(arm,data); //添加自己的处理代码 ; } }
5 年多之前 回复
91program
91program 回复xh156031883: MoveArm 是什么功能呢?
5 年多之前 回复
xh156031883
xh156031883 注释掉m_slider1.SetPos(pos11)后界面还是会闪烁···注释掉最后两句才不会闪烁,但是后面两句有用的。有什么办法解决吗?谢谢
5 年多之前 回复

如果是自己实现的滚动,通常是自己绘画的范围超过了客户区,这时候自己设置客户区需要的总大小,然后滚动条就会自动在合适的时候出现。滚动过程实际上是在OnPaint()函数中根据当前滚动的位置进行绘画对应范围的内容。
如果是windows自己实现的,显然你的这个做法就是多余的了

xh156031883
xh156031883 不懂你的意思哎···
5 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问