Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смазанный текст в EditBox 
:(
    Опции темы
Alv
Дата 6.8.2006, 04:24 (ссылка)   | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Народ, подскажите как справится с проблемкой: в EditBox (стиль мультилайн - вкл.) текст при любой прокрутке смазывается (ну, строки как бы накладываются друг на друга), если выделить смазанный текст мышкой эффект смазывания пропадает - до следующего движения текста. Как избавится от этой нежелательной фичи?
PM MAIL   Вверх
586
Дата 6.8.2006, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Какой стиль EditBox'a?
Как обрабатываешь сообщения окна?
PM   Вверх
Alv
Дата 6.8.2006, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Стили мультилайн и wantreturn. Сообщения не обрабатываются, поскольку все три EditBox'а нужны только для вывода информации из программы для пользователя (часть из файла, часть - в результате работы программы). Да! У двоих из трех EditBox'ов еще стиль readonly.
PM MAIL   Вверх
586
Дата 6.8.2006, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Alv @  6.8.2006,  16:10 Найти цитируемый пост)
Сообщения не обрабатываются, поскольку все три EditBox'а нужны только для вывода информации из программы для пользователя (часть из файла, часть - в результате работы программы). 

Сообщения диалога (или главного окна). Какие сообщения перехватываешь, что возвращаешь.

Цитата(Alv @  6.8.2006,  16:10 Найти цитируемый пост)
Стили мультилайн и wantreturn

Это не всё. Есть ещё стили. Например WS_VISIBLE. Также укажи Ex-стиль.
PM   Вверх
GremlinProg
Дата 6.8.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



только под XP: к расширенным стилям класса главного окна, на котором лежат эдиты, добавь флаг WS_EX_COMPOSITED. Он обеспечит системный двойной буфер, смазываться ни чего не будет.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Alv
Дата 8.8.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата(586)
Это не всё. Есть ещё стили. Например WS_VISIBLE. Также укажи Ex-стиль.


Ex-стиль: WS_EX_CLIENTEDGE
Остальные: WS_CHILD,WS_VISIBLE,ES_LEFT,ES_AUTOVSCROLL,ES_MULTILINE,ES_WANTRETURN,ES_READONLY

Цитата(586)
Сообщения диалога (или главного окна). Какие сообщения перехватываешь, что возвращаешь.


WM_CTLCOLORSTATIC - фон
WM_NOTIFY - табконтрол и тултипсы обрабатываются
WM_PAINT
WM_COMMAND

Цитата(586)
только под XP: к расширенным стилям класса главного окна, на котором лежат эдиты, добавь флаг WS_EX_COMPOSITED. Он обеспечит системный двойной буфер, смазываться ни чего не будет.


под XP еще не пробовал, но в Win98 и Win2k получается забавный эффект в некоторых местах - прозрачность  smile да и решить бы для всех ОС хотелось бы... хотя спасибо за совет!
PM MAIL   Вверх
586
Дата 8.8.2006, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Alv @  8.8.2006,  18:27 Найти цитируемый пост)
WM_PAINT

Попробуй отказаться от обработки этого сообщения. Если проблема исчезнет, значит ты неправильно обрабатываешь это сообщение. Если проблема осталась, откажись от другого сообщения. В итоге ты найдешь ошибку.
Покажи код.
PM   Вверх
Alv
Дата 8.8.2006, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Цитата(586)
WM_PAINT
Попробуй отказаться от обработки этого сообщения. Если проблема исчезнет, значит ты неправильно обрабатываешь это сообщение. Если проблема осталась, откажись от другого сообщения. В итоге ты найдешь ошибку.
Покажи код.


Угумс, виновато оказалось WM_CTLCOLORSTATIC, но там всего три строчки и без них у каждого контрола левый фон получается  smile 

Код

dc = (HDC) wParam;
SetBkMode( dc, TRANSPARENT );
return (BOOL) GetStockObject( TRANSPARENT );

PM MAIL   Вверх
586
Дата 8.8.2006, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Alv @  8.8.2006,  19:18 Найти цитируемый пост)
Угумс, виновато оказалось WM_CTLCOLORSTATIC, но там всего три строчки и без них у каждого контрола левый фон получается smile

Код
dc = (HDC) wParam;
SetBkMode( dc, TRANSPARENT );
return (BOOL) GetStockObject( TRANSPARENT );

Для какой цели этот код?
PM   Вверх
Alv
Дата 8.8.2006, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Принудительно делаю фон контролов прозрачным. Без него под каждым контролом в системах, старше Win98 (под ней пишется) фон серый, хотя все окна создаются по умолчанию, цвет в этой задаче мне не нужен. Ну вот решив одну проблему, нашел другую smile 
PM MAIL   Вверх
Fixin
Дата 8.8.2006, 19:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



Цитата(Alv @  8.8.2006,  19:08 Найти цитируемый пост)
под каждым контролом
Цитата(Alv @  8.8.2006,  18:18 Найти цитируемый пост)
 WM_CTLCOLORSTATIC
нуу, под каждым ли?
Цитата(Alv @  8.8.2006,  19:08 Найти цитируемый пост)
Принудительно делаю фон контролов прозрачным.
Что ты имеешь ввиду?

PM MAIL ICQ   Вверх
GremlinProg
Дата 8.8.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



TRANSPARENT - это параметр не для GetStockObject.
В твоем случае этот код преобразится как GetStockObject(LTGRAY_BRUSH), т.е. вернет кисть светло-серого цвета. Есть на это другой сток: NULL_BRUSH. Вот с ней и получится, то, что задний фон не будет закрашен кистью.


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
Alv
Дата 9.8.2006, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.7.2006
Где: Москва

Репутация: нет
Всего: нет



Все равно эффект смазывания не проходит  smile 
PM MAIL   Вверх
586
Дата 9.8.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Alv, а у тебя Edit и Static не на одной области находятся? Для чего тебе прозрачный Static?
PM   Вверх
Fixin
Дата 9.8.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ёжик
***


Профиль
Группа: Комодератор
Сообщений: 1357
Регистрация: 6.1.2004

Репутация: 8
Всего: 18



создай отдельный проект с окном и едитом на нем, добавь тескст, прокрути и посмотри, есть ли это смазывание. если есть, выкладываешь этот временный проект на форуме и мы (или я) находим тебе все проблемы.
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0736 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.