Как избежать мерцания при обработке WM_ERASEBKGND в диалоговом окне Windows

[g1] Следующее решение появилось, когда я заметил параметр $ break функции [g0] wordwrap [/g0]: [/g1]
[g2] string wordwrap (string $ str [, int $ width = 75 [, string $ break = "\n" [, bool $ cut = false]]]) [/g2] [g3] Вот решение: [/g3] [f1] [g4] Пример # 1. [/G4] [f2] [g5] Приведенный выше пример выдаст: [/g5] [f3] [g6] Пример # 2. [/G6] [f4] [g7] Приведенный выше пример выдаст: [/g7] [f5]
9
задан DougN 2 October 2008 в 21:59
поделиться

5 ответов

Предположение, что "FillSolidRect" является стиранием Вашего образования затем, возвращает TRUE от WM_ERASEBKGND.

Чтобы сделать двойную буферизацию, которую Вы почти делаете в своем фрагменте кода, необходимо будет использовать CreateCompatibleBitmap и выбор это в memDC.

8
ответ дан 4 December 2019 в 07:15
поделиться

Попытайтесь добавить следующую строку к своей функции OnInitDialog:

    ModifyStyle(0, WS_CLIPCHILDREN, 0);
6
ответ дан 4 December 2019 в 07:15
поделиться

Ничего не сделайте в обработке WM_ERASEBKGND и сделайте стирание как часть Вашего основного WM_PAINT. Можно или нарисовать более умным так, чтобы Вы только перерисовали недопустимые области, или более легко, двойной буфер рисунок.

Ничего не делая в фоне стирания, у Вас есть весь свой код для прорисовки в одном месте, которое должно помочь другим следовать и поддержать.

5
ответ дан 4 December 2019 в 07:15
поделиться

При предназначении для WinXP или выше можно также использовать стиль WS_EX_COMPOSITED для включения двойной буферизации по умолчанию для окон верхнего уровня с этим стилем. Примите во внимание, что это имеет его собственный набор ограничений - а именно, более никакое вытягивание из использования циклов OnPaint GetDC, и т.д.

5
ответ дан 4 December 2019 в 07:15
поделиться

Двойная буферизация является действительно единственным способом сделать эту работу.

Дочерние элементы управления будут заботиться о себе, пока Вы удостоверяетесь CLIPCHILDREN.

3
ответ дан 4 December 2019 в 07:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: