![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Народ, подскажите как справится с проблемкой: в EditBox (стиль мультилайн - вкл.) текст при любой прокрутке смазывается (ну, строки как бы накладываются друг на друга), если выделить смазанный текст мышкой эффект смазывания пропадает - до следующего движения текста. Как избавится от этой нежелательной фичи?
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Какой стиль EditBox'a?
Как обрабатываешь сообщения окна? |
|||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Стили мультилайн и wantreturn. Сообщения не обрабатываются, поскольку все три EditBox'а нужны только для вывода информации из программы для пользователя (часть из файла, часть - в результате работы программы). Да! У двоих из трех EditBox'ов еще стиль readonly.
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Сообщения диалога (или главного окна). Какие сообщения перехватываешь, что возвращаешь. Это не всё. Есть ещё стили. Например WS_VISIBLE. Также укажи Ex-стиль. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
только под XP: к расширенным стилям класса главного окна, на котором лежат эдиты, добавь флаг WS_EX_COMPOSITED. Он обеспечит системный двойной буфер, смазываться ни чего не будет.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alv |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Ex-стиль: WS_EX_CLIENTEDGE Остальные: WS_CHILD,WS_VISIBLE,ES_LEFT,ES_AUTOVSCROLL,ES_MULTILINE,ES_WANTRETURN,ES_READONLY
WM_CTLCOLORSTATIC - фон WM_NOTIFY - табконтрол и тултипсы обрабатываются WM_PAINT WM_COMMAND
под XP еще не пробовал, но в Win98 и Win2k получается забавный эффект в некоторых местах - прозрачность |
||||||
|
|||||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| Alv |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Угумс, виновато оказалось WM_CTLCOLORSTATIC, но там всего три строчки и без них у каждого контрола левый фон получается
|
||||
|
|||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Принудительно делаю фон контролов прозрачным. Без него под каждым контролом в системах, старше Win98 (под ней пишется) фон серый, хотя все окна создаются по умолчанию, цвет в этой задаче мне не нужен. Ну вот решив одну проблему, нашел другую
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
нуу, под каждым ли?
Что ты имеешь ввиду? |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
TRANSPARENT - это параметр не для GetStockObject.
В твоем случае этот код преобразится как GetStockObject(LTGRAY_BRUSH), т.е. вернет кисть светло-серого цвета. Есть на это другой сток: NULL_BRUSH. Вот с ней и получится, то, что задний фон не будет закрашен кистью. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Все равно эффект смазывания не проходит
|
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Alv, а у тебя Edit и Static не на одной области находятся? Для чего тебе прозрачный Static?
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
создай отдельный проект с окном и едитом на нем, добавь тескст, прокрути и посмотри, есть ли это смазывание. если есть, выкладываешь этот временный проект на форуме и мы (или я) находим тебе все проблемы.
|
|||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Если не обрабатывать сообщение WM_CTLCOLORSTATIC, то на всех контролах (даже на EditBox'ах) фон, т.е. например описание radiobox'а, checkbox'а и даже цвет обычных кнопок, а также поля editbox'а заполняются левым цветом. Этот эффект не виден на том ПК, на котором составляется прога (Win'98), но на других ПК с Win2K и WinXP этот эффект проявляется.
|
|||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
Убрал все лишнее, оставил только сцену. Pr.exe - с эффектом смазывания, Pr1.exe - без него (без обработки WM_CTLCOLORSTATIC), но с левым фоном.
Присоединённый файл ( Кол-во скачиваний: 9 )
Pr.zip 72,45 Kb |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
1) извини, конечно, но такое ощущение, что циклами и массивами ты пользоваться не научился, не обижайся.
2) программеры из майкрософта всегда заботились о быстроте работы приложений и вводили множество оптимизаций. с одной из них ты столкнулся. для ускорения перемещения текста в мультистроковых редактируемых полях используется перемещение канвы контекста устройства элемента управления, а т.к. стоит режим прозрачности, то с канвы копируется пустое место и это дело всё глючит. Это предпосылки. сейчас попробую решить эту проблему. |
|||
|
||||
| Alv |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 11 Регистрация: 26.7.2006 Где: Москва Репутация: нет Всего: нет |
На дельные замечания обижаться глупо. Не буду оправдываться - что есть, то есть. Но вот совета, если на него будет время, попрошу. Особенно интересует совет по оптимизации создания и управления различными контролами. Можно ПМом, конечно, опять-таки, если нетрудно. Ух, куда меня понесло - наперекор майкрософтовским программерам Буду благодарен за помощь, но вот проголосовать, увы, не могу |
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
Ну да, это я всю прогу просмотрю и сделаю что смогу, самому интересно.
|
|||
|
||||
| Fixin |
|
|||
![]() Ёжик ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1357 Регистрация: 6.1.2004 Репутация: 8 Всего: 18 |
Сделано халтурно, сам видишь, но лучшего спсоба не нашел, да и не искал особо, времени не хватает
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |