Этот вопрос можно считать продолжением Мерцание в listview с помощью ownerdraw и virtualmode.
У меня есть элемент управления ListView
в Virtual mode
, и я пытаюсь выполнить пользовательский чертеж. Выделение позиции выполняется с помощью следующего метода переопределения:
protected override void OnDrawItem(DrawListViewItemEventArgs eventArgs)
Как упоминалось в упомянутом вопросе, пользовательский чертеж вводит мерцание мыши над событиями. Отладчик говорит мне, что это происходит из-за чрезмерного количества пользовательских событий рисования, которые увольняются.
Теперь - принятый ответ на указанный вопрос говорит нам:
Это ошибка в .NET ListView, и вы не можете обойти ее двойная буферизация.
-
Итак, насколько надежна эта информация? Неужели это ошибка? Или, может быть, мы просто пытаемся отрезать часть сообщений и надеемся, что это не изменит видимого поведения?
-
Является ли это правдой, что если у меня есть моя процедура рисования владельца для
ListView
вVirtual Mode,
, я могу подавить эти событияCustom Draw
и выполнить только мой рисунок вWM_PAINT
или, может быть, это неверно для некоторых случаев? -
Каковы предпосылки для элемента управления
System.Windows.Forms
, чтобы он мог выполнять всю картину вWM_PAINT
без изменения ее начального поведения?