关于滚动条的闪烁问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于滚动条的闪烁问题相关的知识,希望对你有一定的参考价值。

我做了一个按钮控制的下拉菜单,并附加了滚动条。但是当不执行窗口重绘时候出现如图的样子,后来我加了窗口重绘语句后,出现滚动条和其他控件闪烁问题。(这里是添加的滚动条控件)下面是我的滚动条滚动的那部分的代码,请高手解答。
void CDownListDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

// TODO: 在此添加消息处理程序代码和/或调用默认值
if(pScrollBar == &m_scrollbar)

switch (nSBCode)

case SB_LINEUP:
scrollinfo.nPos -= 1;
if (scrollinfo.nPos<0)

scrollinfo.nPos = scrollinfo.nMin;
break;

m_scrollbar.SetScrollInfo(&scrollinfo);
m_Edit.ScrollWindow(0,10);
break;
case SB_LINEDOWN:
scrollinfo.nPos += 1;
if (scrollinfo.nPos>100)

scrollinfo.nPos = scrollinfo.nMax;
break;

m_scrollbar.SetScrollInfo(&scrollinfo);
m_Edit.ScrollWindow(0,-10);
break;
case SB_PAGEUP:
scrollinfo.nPos -= 5;
if (scrollinfo.nPos<scrollinfo.nMin)

scrollinfo.nPos = scrollinfo.nMin;
break;

m_scrollbar.SetScrollInfo(&scrollinfo);
m_Edit.ScrollWindow(0,10*5);
break;
case SB_PAGEDOWN:
scrollinfo.nPos += 5;
if (scrollinfo.nPos>scrollinfo.nMax)

scrollinfo.nPos = scrollinfo.nMax;
break;

m_scrollbar.SetScrollInfo(&scrollinfo);
m_Edit.ScrollWindow(0,-10*5);
break;
case SB_THUMBPOSITION:
m_Edit.ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
scrollinfo.nPos = nPos;
m_scrollbar.SetScrollInfo(&scrollinfo);
break;
case SB_THUMBTRACK:
m_Edit.ScrollWindow(0,(scrollinfo.nPos-nPos)*10);
scrollinfo.nPos = nPos;
m_scrollbar.SetScrollInfo(&scrollinfo);
break;


this->Invalidate();
CDialog::OnVScroll(nSBCode, nPos, pScrollBar);
将加上重绘后,鼠标左键摁住滚动条向下的箭头,滚动条消失。。。悲剧。求达人解决

请教一下你是怎么解决的吗?,我也有这个问题,我的更加复杂,滚动条程序跟你的差不多,然后我是在对话框上有个图片控件,滚动条响应之后就严重闪烁了追问

我的解决办法是先让整个窗口刷新 this->Invalidate();然后在后面再加上一句代码 禁止滚动滑块的刷新,m_scrollbar.RedrawWindow(FALSE); //禁止滑块的刷新。就是在我上面贴出的代码里,加上一句话。

参考技术A 使用SelectClipRgn
设置裁剪区,事先生成一个裁剪区,排除所有子控件。
结合 ValidateRect 来使用
参考技术B 不知道,哈哈本回答被提问者采纳 参考技术C 你试一下InvalidateRect()吧,这个函数,至少可以不刷新你那个
不行的话,只能从网上搜那传说中的双缓存技术了。没用过,估计你这边也够呛能用。

关于VB.NET进度条的实例

我想编一个进度条程序,让它每0.5秒进度增加1%,并用文本显示当前的进度,该如何实现?

这是我自己写的一个进度条控件,如图:

边框粗细和边框颜色以及进度条颜色都可以调。

进度条大小你可以自己拉伸。

同时,进度条还提供了丰富的动画效果(如边框闪烁效果【可关闭】,进度条滑动效果等。)

将边框粗细调为0即可实现无边框(同时边框闪烁效果(见“Flash”属性)也将关闭!)

进度值(见“ProgressValue”属性)类型为Single(单精度浮点数)

将我提供的DLL文件拖到工具箱即可安装

只能用于Windows窗体应用程序!

目标平台:.Net Framework 3.5

属性说明:

1.BorderColor 用于调整边框颜色

2.BorderWidth 用于调整边框粗细

3.Flash 用于开启、关闭边框闪烁效果

4.ProgressValue 用于设置、查看进度值

5.ForeColor 用于设置进度条颜色

6.BackColor 用于设置控件背景色

附件如果丢失,请私信。

参考技术A Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.ProgressBar1.Style = ProgressBarStyle.Continuous
n = 0
Me.Timer1.Enabled = True
Me.Timer1.Interval = 500
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Me.Timer1.Enabled = False
n = n + 1
If n <= 100 Then
Me.ProgressBar1.Value = n
Me.Timer1.Enabled = True
Else
Me.ProgressBar1.Value = 100
End If
'在定时器里跟新n就可以了,可以添加个label
End Sub

n为全局变量,添加一个进度条控件和定时器控件,文本显示进度就显示n值就可以了本回答被提问者采纳

以上是关于关于滚动条的闪烁问题的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript SWFObject:带有浏览器滚动条的全屏闪烁

打开一个网页,拉那个滚动条,页面就闪烁 为啥啊

关于隐藏原生滚动条的一些事

iframe关于滚动条的去除和保留

关于滚动条的操作

求教:关于MFC控件中的滚动条事件........