Я использую текстовое вложение на панели, а затем прокручиваю панель с помощью полосы прокрутки вместо использования полосы прокрутки по умолчанию в Windows.
Но проблема в том, что я использую LockWindowUpdate при прокрутке, что повлияет на окно рабочего стола и заставит его мерцать в Windows XP.
Очень интересная вещь, когда я открываю файловый браузер в WinXp и прокручиваю полосу прокрутки в файловом браузере. Затем вернитесь к моему приложению и снова прокрутите настроенную полосу прокрутки, мерцание исчезнет.
Кто-нибудь знает, что на самом деле происходит в этом случае? как работает LockWindowUpdate?
Спасибо
protected override void OnScroll(ScrollEventArgs se)
{
if (se.Type == ScrollEventType.First)
{
LockWindowUpdate(this.Handle);
}
else if (se.Type == ScrollEventType.ThumbTrack /* || se.Type == ScrollEventType.ThumbPosition*/)
{
LockWindowUpdate(IntPtr.Zero);
this.Refresh();
LockWindowUpdate(this.Handle);
}
else
{
LockWindowUpdate(IntPtr.Zero);
this.Invalidate();
LockWindowUpdate(IntPtr.Zero);
}
base.OnScroll(se);
}
- код события прокрутки панели
Я просто использую свою настраиваемую полосу прокрутки, чтобы прокрутить панель в нужное положение.
если я использую
SendMessage(parent.Handle, WM_SETREDRAW, false, 0);
SendMessage(parent.Handle, WM_SETREDRAW, true, 0);
панель все еще сильно дрожит.
И сегодня я обнаружил, что если я просто сфокусирую значок на рабочем столе, рабочий стол больше не будет мерцать, но я добавлю код в программу, используя
SetForegroundWindow(Win32API.GetDesktopWindow());
это тоже не работает, так что я очень устал от этой проблемы.
кто-нибудь знает этот случай?