Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Проблема с двойной буфферизацией


Автор: Витька 5.2.2005, 13:36
Здравствуйте. Я NET только начал осваивать и пролема такого плана. Необходимо, чтобы задний фон формочки не перерисовывался при вызове Invalidate() (или что правильно использовать для перерисовки?).

В mfc можно было вызвать Invalidate(false) и перехватить WM_EraseBackground

А как сделать подобное в C# или в С++ Windows Forms?

Автор: Domestic Cat 6.2.2005, 00:20
А что значит "задний фон формочки" и при чем тут в такой постановке вопроса двойной бафферинг?

Автор: Витька 6.2.2005, 01:18
при вызове Invalidate, сначла рисуется задний фон окошка (BackGround, если совсем по-глупому - то, что по умолчанию серенькое)

а потом поверх вего этого дела - всё то, что написано в OnPaint

если при этот порастягивать - поуменьшать окошко, или Invalidate делать по таймеру, то всё будет здОрово так мигать,
ибо становится видно как сначала поверх всего залился задник, а потом пошло рисоваться то, что в OnPaint

когда я писал под mfc делал так - глушил erasebackground - после чего задний фон не перерисовывался вообще

а в OnPaint самостоятельно заливал фон, рисовал поверх него все на другом DC (если здесь, то на Graphics), что нужно и потом результат переносил в окошко (то есть в DC (или Graphics), связанный с моим окном)

прошу прощения, если непонятно

Автор: Domestic Cat 6.2.2005, 01:32
Ну на самом деле все очень просто, нужно на объекте формы вызвать
Код

SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.DoubleBuffer, true);

Автор: Витька 7.2.2005, 02:29
Как говорится - большой человеческий спасиб.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)