Убрать мигания при resize
От: Imbecile Россия  
Дата: 13.05.05 11:31
Оценка:
Как сделать так, чтобы при изменении размера окна (за уголок или за край),
клиентская область не мигала,

скорее всего надо убирать стили CS_HREDRAW и CS_VREDRAW, пробовал — не хочет работать,
подскажите где и как их убирать или другой код для этих целей,

также буду несказанно рад статьям, советам и тд.
Re: Убрать мигания при resize
От: WinterMute Россия http://yarrr.ru
Дата: 13.05.05 13:02
Оценка:
ПОчитай про BackBuffer и посмотри WM_ERASEBKGND.
Re: Убрать мигания при resize
От: Аноним  
Дата: 13.05.05 13:03
Оценка:
Здравствуйте, Imbecile, Вы писали:

I>Как сделать так, чтобы при изменении размера окна (за уголок или за край),

I>клиентская область не мигала,

I>скорее всего надо убирать стили CS_HREDRAW и CS_VREDRAW, пробовал — не хочет работать,

I>подскажите где и как их убирать или другой код для этих целей,

I>также буду несказанно рад статьям, советам и тд.


Еще поможет WS_CLIPCHILDREN
Re: Убрать мигания при resize
От: FireHose  
Дата: 13.05.05 18:21
Оценка:
Здравствуйте, Imbecile, Вы писали:

I>Как сделать так, чтобы при изменении размера окна (за уголок или за край),

I>клиентская область не мигала,

I>скорее всего надо убирать стили CS_HREDRAW и CS_VREDRAW, пробовал — не хочет работать,

I>подскажите где и как их убирать или другой код для этих целей,

I>также буду несказанно рад статьям, советам и тд.


Присоединяюсь к вопросу. Собственно как?
Предположим у меня CListCtrl, растянутый на весь экран. При изменеии размера окна, CListCtrl начинает подмигивать. С другой стороны, если менять размер окна explorer'а, то окно FolderView (класс SysListView32) совсем не мигает. Как такого добиться?
Re[2]: Убрать мигания при resize
От: WinterMute Россия http://yarrr.ru
Дата: 13.05.05 19:51
Оценка:
FH>Присоединяюсь к вопросу. Собственно как?
FH>Предположим у меня CListCtrl, растянутый на весь экран. При изменеии размера окна, CListCtrl начинает подмигивать. С другой стороны, если менять размер окна explorer'а, то окно FolderView (класс SysListView32) совсем не мигает. Как такого добиться?

Если присоединяешся к вопросам, то почему бы не присоединиться к ответам и не почитать их?
Re[3]: Убрать мигания при resize
От: Аноним  
Дата: 14.05.05 17:21
Оценка:
Здравствуйте, WinterMute, Вы писали:

FH>>Присоединяюсь к вопросу. Собственно как?

FH>>Предположим у меня CListCtrl, растянутый на весь экран. При изменеии размера окна, CListCtrl начинает подмигивать. С другой стороны, если менять размер окна explorer'а, то окно FolderView (класс SysListView32) совсем не мигает. Как такого добиться?

WM>Если присоединяешся к вопросам, то почему бы не присоединиться к ответам и не почитать их?


Согласен присоединиться к чему угодно, если это прольёт свет на вышеназванную проблему.

Рассмотрим ответы:
1) BackBuffer + WM_ERASEBKGND — приблизительно такое решение мне и самому в голову приходило, но мне оно показалось слишком сложным. Неужто нет ничего попроще? Я был лучшего мнения о MFC.

2) WS_CLIPCHILDREN — хорошая штука, но она до конца мерцания не устраняет. Особенно это заметно, когда при изменении размера окна меняется размер CListCtrl.
Re[4]: Убрать мигания при resize
От: WinterMute Россия http://yarrr.ru
Дата: 16.05.05 13:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, WinterMute, Вы писали:


FH>>>Присоединяюсь к вопросу. Собственно как?

FH>>>Предположим у меня CListCtrl, растянутый на весь экран. При изменеии размера окна, CListCtrl начинает подмигивать. С другой стороны, если менять размер окна explorer'а, то окно FolderView (класс SysListView32) совсем не мигает. Как такого добиться?

WM>>Если присоединяешся к вопросам, то почему бы не присоединиться к ответам и не почитать их?


А>Согласен присоединиться к чему угодно, если это прольёт свет на вышеназванную проблему.


А>Рассмотрим ответы:

А>1) BackBuffer + WM_ERASEBKGND — приблизительно такое решение мне и самому в голову приходило, но мне оно показалось слишком сложным. Неужто нет ничего попроще? Я был лучшего мнения о MFC.

Ты был неправильного мнения о MFC . Никаких чудес MFC не делает, только автоматизирует некоторые рутинные операции по обработке сообщений. Эта проблема проистикает из особенностей архитектуры WinApi, так что, так просто, установкой абстрактного стиля WS_DO_NOT_MIGAT проблему не решить. Но можешь поискать на CodeProject или где нибудь ещё, классы которые автоматизируют "антимигание", для WTL я такое точно видел, для MFC, по идее, тоже должны быть.
Re[5]: Убрать мигания при resize
От: Аноним  
Дата: 16.05.05 15:05
Оценка:
Здравствуйте, WinterMute, Вы писали:

WM>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, WinterMute, Вы писали:


FH>>>>Присоединяюсь к вопросу. Собственно как?

FH>>>>Предположим у меня CListCtrl, растянутый на весь экран. При изменеии размера окна, CListCtrl начинает подмигивать. С другой стороны, если менять размер окна explorer'а, то окно FolderView (класс SysListView32) совсем не мигает. Как такого добиться?

WM>>>Если присоединяешся к вопросам, то почему бы не присоединиться к ответам и не почитать их?


А>>Согласен присоединиться к чему угодно, если это прольёт свет на вышеназванную проблему.


А>>Рассмотрим ответы:

А>>1) BackBuffer + WM_ERASEBKGND — приблизительно такое решение мне и самому в голову приходило, но мне оно показалось слишком сложным. Неужто нет ничего попроще? Я был лучшего мнения о MFC.

WM>Ты был неправильного мнения о MFC . Никаких чудес MFC не делает, только автоматизирует некоторые рутинные операции по обработке сообщений. Эта проблема проистикает из особенностей архитектуры WinApi, так что, так просто, установкой абстрактного стиля WS_DO_NOT_MIGAT проблему не решить. Но можешь поискать на CodeProject или где нибудь ещё, классы которые автоматизируют "антимигание", для WTL я такое точно видел, для MFC, по идее, тоже должны быть.


Спасибо большое за разъяснения, WinterMute. Приятно, когда кто-то расставляет все точки над i.

У меня есть ещё один вопрос, на который хотелось бы услышать мнение знающего человека. В explorer'е CListCtrl работает замечательно. Как Microsoft этого добилась? У меня на этот счёт есть две версии. Либо они как-то по-умному переписали DefWindowProc, скажем, с использованием BackBuffer + WM_ERASEBKGND, либо они используют какую-то продвинутую версию CListCtrl. Поделитесь, пожалуйста, со мной своими соображениями.
Re[6]: Убрать мигания при resize
От: WinterMute Россия http://yarrr.ru
Дата: 17.05.05 08:50
Оценка:
А>У меня есть ещё один вопрос, на который хотелось бы услышать мнение знающего человека. В explorer'е CListCtrl работает замечательно. Как Microsoft этого добилась? У меня на этот счёт есть две версии. Либо они как-то по-умному переписали DefWindowProc, скажем, с использованием BackBuffer + WM_ERASEBKGND, либо они используют какую-то продвинутую версию CListCtrl. Поделитесь, пожалуйста, со мной своими соображениями.

В проводнике используется стандартный ListView, но он засабклассен. Скорее всего, стандартной процедуре отрисовки они подсовывают MedoryDC, и после отрисовки в память быстро отрисовывают результат на экран.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.