关于滚动条的闪烁问题
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 用于设置控件背景色
附件如果丢失,请私信。
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值就可以了本回答被提问者采纳
以上是关于关于滚动条的闪烁问题的主要内容,如果未能解决你的问题,请参考以下文章