我有一个有很多自定义控件的表单有一个可怕的闪烁,我找到了以下代码(这里在stackoverflow上搜索解决方案,How to fix the flickering in User controls 或由Hans Passant发布的Winforms Double Buffering修复了闪烁
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED
return cp;
}
}
但是,现在如果单击滚动条上的位置栏,位置栏将保持固定,直到我松开鼠标按钮。
有没有办法在拖动时更新滚动位置栏并且控件上没有闪烁?
非常感谢
答案 0 :(得分:1)
这里找到的答案,全部归功于CharlesW
private const int WM_HSCROLL = 0x114;
private const int WM_VSCROLL = 0x115;
protected override void WndProc (ref Message m)
{
if ((m.Msg == WM_HSCROLL || m.Msg == WM_VSCROLL)
&& (((int)m.WParam & 0xFFFF) == 5))
{
// Change SB_THUMBTRACK to SB_THUMBPOSITION
m.WParam = (IntPtr)(((int)m.WParam & ~0xFFFF) | 4);
}
base.WndProc (ref m);
}