| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > InvalidateRect(...) |
| Автор: bilbobagginz 3.2.2007, 00:25 |
| здравствуйте. есть вопрос. занимаюсь к сожалению отладкой прорисовки програмки на MFC. не нашёл доки, но вопрос заинтересовал. у меня есть переменная вида CComboBox по имени m_cbx. если я на нее тыкаю, открывается поп-ап, и он накрывает другой элемент, по имени LCD, чуточку. короче когда пользователь клацает на комбу, после закрытия комбы, и получения нового значения, происходит перерисовка некоторых регионов в окне. в частности, весь регион, кусок которого накрывает комбо, перерисовывается, и создаёт маленький фликер. до фликера, комбо прикрывает (указано стрелкой) кусок LCD: ![]() после выбора элемента из комбо, происходит фликер на указанный регион: ![]() Вопрос: как сделать так, чтобы перерисовывался не весь кусок из второго рисунка, а только тот, который был ПОД комбо ? В конце концов я возможно вообще изменю этот переключатель на другой, но интересует именно, как сделать это. Спасибо. |
| Автор: Earnest 6.2.2007, 08:45 |
| По-моему, это скорее зависит от того, как реализовано прорисовка перекрываемого контрола. Инвалидэйтится только кусочек, но не факт что при прорисовке ставится отсечение. Это товй контрол, самописный? Который полностью перерисовывается и мигает? Тогда обрати внимание, как он рисуется: он должен использовать значение невалидного прямоугольника, который выдает CPaintDC и рисовать только в нем. Кроме того, моргание обычно связано с ненужным стиранием. Если его убрать - то даже при полной прорисовке моргания не заметно. И последнее: если прорисовка контрола сложная, то лучше ее делать через буфер. |
| Автор: bilbobagginz 9.2.2007, 00:13 | ||
контрол - мой ( не совсем... прорисовка работает через буффер, я немного поковырял код и убедился что скорее всего я этой темой займусь сей ночью, когда разрешу все остальные более важные проблемы. вроде бы всё остальное нормально прорисовывается, даже без мигания. Поэтому и странно, что этот ( на нижнем рисунке ) прямоугольник мигает и перерисовывается. попозже настучу сюда что получилось. |