Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > InvalidateRect(...)


Автор: bilbobagginz 3.2.2007, 00:25
здравствуйте.
есть вопрос. занимаюсь к сожалению отладкой прорисовки програмки на MFC.
не нашёл доки, но вопрос заинтересовал.

у меня есть переменная вида CComboBox по имени m_cbx.
если я на нее тыкаю, открывается поп-ап, и он накрывает другой элемент, по имени LCD, чуточку.

короче когда пользователь клацает на комбу, после закрытия комбы, и получения нового значения,
происходит перерисовка некоторых регионов в окне.

в частности, весь регион, кусок которого накрывает комбо, перерисовывается, и создаёт маленький фликер.

до фликера, комбо прикрывает (указано стрелкой) кусок LCD:
user posted image

после выбора элемента из комбо, происходит фликер на указанный регион:
user posted image


Вопрос: как сделать так, чтобы перерисовывался не весь кусок из второго рисунка, а только тот, который был ПОД комбо ?

В конце концов я возможно вообще изменю этот переключатель на другой,
но интересует именно, как сделать это.

Спасибо.

Автор: Earnest 6.2.2007, 08:45
По-моему, это скорее зависит от того, как реализовано прорисовка перекрываемого контрола.
Инвалидэйтится только кусочек, но не факт что при прорисовке ставится отсечение. Это товй контрол, самописный? Который полностью перерисовывается и мигает?
Тогда обрати внимание, как он рисуется: он должен использовать значение невалидного прямоугольника, который выдает CPaintDC и рисовать только в нем. Кроме того, моргание обычно связано с ненужным стиранием. Если его убрать - то даже при полной прорисовке моргания не заметно. И последнее: если прорисовка контрола сложная, то лучше ее делать через буфер.

Автор: bilbobagginz 9.2.2007, 00:13
Цитата

Это товй контрол, самописный? Который полностью перерисовывается и мигает?

контрол - мой ( не совсем... smile zkv меня пнул в правильном направлении )
прорисовка работает через буффер, я немного поковырял код и убедился что скорее всего я этой темой займусь сей ночью, когда разрешу все остальные более важные проблемы.
вроде бы всё остальное нормально прорисовывается, даже без мигания. Поэтому и странно, что этот ( на нижнем рисунке ) прямоугольник мигает и перерисовывается.

попозже настучу сюда что получилось.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)