Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.173] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
Следующая проблема: Есть диалоговое окно. В окне находятся элементы 20 штук, в которые происходит текстовый вывод (информация о человеке, ФИО и т.д.) и фотография. Информация меняется с некой периодичностью. В заисимости от человека поля в окне не только меняют свой текст, размер шрифта, но и расположение и размер. Использую функции SetWindowPos или MoveWindow (в конечном результате проблема возникала с использованием любой из функции). Некоторое время всё замечательно работает. но через количество смен информации в диалоговом окне (порядка 1000 смен) окно начинает перерисовывать не только свою область, но и область вне своего диалогового окна, а потом и вовсе мерцать начинает. Пробывал на нескольких машинах, и на некоторых машинах ещё и шрифт становится невообразимо большой. Проверял расположение всех координат элементов диалога - всё нормально. Раньше всё отлично работало. Но в какой-то момент вот приключилось такое дело... Может кто сталкивался с такой проблемой? Может ли это зависить от сервис паков винды? что-нибудь с msvcrt.dll? Буду очень благодарен за любую помощь.. Спасибо.. |
Сообщ.
#2
,
|
|
|
Возможно проблема в том, что своевременно не удаляются выбираемые в контекст объекты - шрифты, кисти, перья...
|
Сообщ.
#3
,
|
|
|
Цитата Petukhov @ поля в окне не только меняют свой текст, размер шрифта Как это осуществляется? Есть подозрение, что dolphin прав. |
Сообщ.
#4
,
|
|
|
Осуществляется так:
-сначала позицианирую элементы на форме и выставляю им размер. -затем с помощью SetFont выставляю элементам каждому свой шрифт -следом SetDlgItemText в каждый нужный элемент -UpdateWindow() |
Сообщ.
#5
,
|
|
|
Лучше пивести код отрисовки...
Так трудно сказать в чем проблема |
Сообщ.
#6
,
|
|
|
Я бы все параметры через TRACE выводил бы в окно дебага, 100% в коде ошибка, при расчете позиций и размеров шрифтов.
То что где-то там у тебя что-то мерцает это результат перемещения MoveWindow. То что ты пишешь, противоречит: Цитата Проверял расположение всех координат элементов диалога - всё нормально. Цитата Пробывал на нескольких машинах, и на некоторых машинах ещё и шрифт становится невообразимо большой. И как ты вообще его проверял ? Цитата Раньше всё отлично работало. Но в какой-то момент вот приключилось такое дело... А эта у всех так Цитата Может кто сталкивался с такой проблемой? Может ли это зависить от сервис паков винды? что-нибудь с msvcrt.dll? Вначале следует убедится, что ошибка не твоя, и только потом искать ее в других. |
Сообщ.
#7
,
|
|
|
Цитата Groman @ Я бы все параметры через TRACE выводил бы в окно дебага, 100% в коде ошибка, при расчете позиций и размеров шрифтов. То что где-то там у тебя что-то мерцает это результат перемещения MoveWindow. То что ты пишешь, противоречит: Да ничего не противоречит, наоборот, скорее доказывает утечки GDI ресурсов, которые в итоге приводят к такого рода глюкам при перерисовке. |
Сообщ.
#8
,
|
|
|
2 Groman
Мерцания экрана не в момент позицианирования элементов, а именно после простоя программы... т.е. после того, как произошла перерисовка раз так 1000-1500 и поступление информации прекратилось, т.е. экран находится в состоянии покоя, то он, экран, начинает мерцать.. Координаты элементов и размер шрифта выводил в трейс - всё ок... но на некоторых машинах шрифт (я попробывал порядка 50 различных машин) получался через некоторое время на экране большой, размер которого не соответствовал размеу, выводимого в трейс... Ещё, шрифт большой получался только на машинах с утановленной на них 2000 виндой... на остальных хр... Мерцание и "заляпование" экрана вне моего диалогового окна происходит на всех машинах... Полгода все работало отлично и проблем не возникало... и в какой-то момент я скомпелировал новую версию и пошли вот такие ошибки.. попытался откатить - ничего не помогло... 2 Uncle_Bob если это утечка GDI, то как лучше её отловить? и где она может быть? Завтра попаду на работу и выложу текст кода.. И, возможно, вы мне подскажите где и в чём я не прав... Все большое спасибо за советы... |
Сообщ.
#9
,
|
|
|
Uncle_Bob
Цитата Да ничего не противоречит, наоборот, скорее доказывает утечки GDI ресурсов, которые в итоге приводят к такого рода глюкам при перерисовке. Ну не знаю, я уже давно и много работаю с элементами с owner draw и их позиционированием, и у меня тоже все возможные параметры цветов и шрифтов меняются, такого никогда не было. |
Сообщ.
#10
,
|
|
|
Всем большое спасибо!
Разобрался с ошибкой - она действительно порылась в создании шрифта. Дело в том, что создание шрифта у меня на каком-то этапе попало в цикл, и, как оказалось, через определённое количество созданий происходит пробема с перерисовкой. Вышел из положения освобождением объекта шрифта после его использования. CFont font; font.CreateFont(..) .. font.DeleteObject(); font.DeleteObject(); Ещё раз всем спасибо за советы и обсуждение! Добавлено Спасибо! Вопрос решён! |