[g2] string wordwrap (string $ str [, int $ width = 75 [, string $ break = "\n" [, bool $ cut = false]]]) [/g2] blockquote> [g3] Вот решение: [/g3] [f1] [g4] Пример # 1. [/G4] [f2] [g5] Приведенный выше пример выдаст: [/g5] [f3] [g6] Пример # 2. [/G6] [f4] [g7] Приведенный выше пример выдаст: [/g7] [f5]
Предположение, что "FillSolidRect" является стиранием Вашего образования затем, возвращает TRUE от WM_ERASEBKGND.
Чтобы сделать двойную буферизацию, которую Вы почти делаете в своем фрагменте кода, необходимо будет использовать CreateCompatibleBitmap и выбор это в memDC.
Попытайтесь добавить следующую строку к своей функции OnInitDialog:
ModifyStyle(0, WS_CLIPCHILDREN, 0);
Ничего не сделайте в обработке WM_ERASEBKGND и сделайте стирание как часть Вашего основного WM_PAINT. Можно или нарисовать более умным так, чтобы Вы только перерисовали недопустимые области, или более легко, двойной буфер рисунок.
Ничего не делая в фоне стирания, у Вас есть весь свой код для прорисовки в одном месте, которое должно помочь другим следовать и поддержать.
При предназначении для WinXP или выше можно также использовать стиль WS_EX_COMPOSITED для включения двойной буферизации по умолчанию для окон верхнего уровня с этим стилем. Примите во внимание, что это имеет его собственный набор ограничений - а именно, более никакое вытягивание из использования циклов OnPaint GetDC, и т.д.
Двойная буферизация является действительно единственным способом сделать эту работу.
Дочерние элементы управления будут заботиться о себе, пока Вы удостоверяетесь CLIPCHILDREN
.