2011-01-03 6 views
4

One is supposed to use double buffering when running locally, but to not use double buffering when the window is on a remote session, if one wants to have the best performance of each mode.Правильно ли LVS_EX_DOUBLEBUFFER не дублирует буфер при работе на удаленном сеансе?

Элемент управления ListView имеет расширенный стиль, LVS_EX_DOUBLEBUFFER, который автоматически двойные буферы содержимое в ListView.

Нужно ли регистрироваться, чтобы получать уведомления об изменениях между локальными и удаленными сеансами и соответствующим образом обновлять этот флаг? Или ListView делает это автоматически?

+1

FWIW, флаг не просто изменяет порядок окраски элемента управления; он также может изменить поведение. Некоторые из новых режимов listview не работают без флага (еще больше ошибок в ужасном общем коде управления, который Microsoft только пишет или тестирует для своих узких целей). Поэтому, если вы не видите проблемы с производительностью на удаленном рабочем столе, я бы не стал менять флаг в разных ситуациях, просто чтобы уменьшить вероятность неожиданностей. Только мои 2 цента! –

+0

@ Hans Passant: Я просто пытаюсь понять, как сообщение в блоге, в котором говорится об общей картине, относится к элементу управления списком, на картинке которого я не контролирую. Если не знать, почему/как это действует, я замалчиваю, чем штраф. Для записи у меня был +1 ответ. –

+0

Вы спрашиваете, удаляется ли стиль LVS_EX_DOUBLEBUFFER из списка ListView, когда приложение запускается на удаленном сеансе? Если это так, вы должны иметь возможность отслеживать подобные вещи. –

ответ

5

ListView автоматически не настраивает себя на использование удаленного или локального. Он учитывает значение флажков расширенного стиля, которые вы устанавливаете при создании элемента управления; если вы установили LVS_EX_DOUBLEBUFFER, тогда дисплей будет дважды буферизирован, а если нет, это не произойдет. Я уверен, что Раймонд Чен согласится, что любое другое поведение будет ошибкой.

Вы можете изменить состояние флага в любое время с LVM_SETEXTENDEDLISTVIEWSTYLE:

SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_DOUBLEBUFFER, isRemote ? 0 : LVS_EX_DOUBLEBUFFER); 

Лобовой следующей статьей после того, как ваш привязанный один показывает, как получить уведомление, когда дисплей переключается между локальным и удаленным: http://blogs.msdn.com/b/oldnewthing/archive/2006/01/04/509194.aspx