Порядок событий OnPaint - PullRequest
1 голос
/ 03 мая 2011

Я разработал некоторые компоненты с их собственным OnPaint -определением, где я их рисую.

Теперь я добавил панель состояния, которая предназначена для перекрытия части моей формы. Я использую альфа-смешанный цвет для серого цвета базовых элементов управления и отображаю текст на нем.

К сожалению, некоторые из моих базовых пользовательских элементов управления рисуют себя после строки состояния и поэтому рисуют себя выше строки состояния. Отладка Я обнаружил, что сначала вызывается строка состояния события рисования, а затем событие рисования базовых элементов управления.

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

Когда нижележащие компоненты рисуют сами, компоненты перед ними всегда должны автоматически аннулироваться, поэтому они перерисовывают себя, но это не происходит. Я также позвонил SendToFront в строке состояния, но это тоже не помогло. Поэтому я также спрашиваю, каков надлежащий механизм для поддержания порядка и как основные компоненты справляются с этим.

Редактировать : я также сталкиваюсь с этой проблемой: при каждом запуске моего OnPaint события мое наложение становится все более непрозрачным, потому что оно рисует с alpha = 128 - красным снова и снова на себя.

1 Ответ

1 голос
/ 03 мая 2011

Чтобы устранить внешние факторы (например, различия между XP, Vista, Win7), вы можете:

  • смешать графику «панели состояния» на каждом элементе управления в их обработчиках OnPaint, чтобы выне нужно возиться с полупрозрачным окном состояния для достижения желаемого отображения.

  • используйте один непрозрачный элемент управления (по существу панель состояния) и визуализируйте конечное изображение, которое вы хотите вэто путем компоновки графики из отдельных элементов управления, что устранит любую неопределенность в отношении того, как будет работать процесс рендеринга.Это означало бы, что вам нужно было бы добавить пользовательскую обработку кликов, но обычно это довольно тривиальное добавление - один из простых способов обойти это - поместить основной «элемент управления отображением» за набором невидимых элементов управления (кнопок), чтобы всеобработка щелчков может работать как обычно, но рисование делегируется одному элементу управления.

...