Как вызвать событие paint c
Давайте напишем наше первое "Hello World" приложение для работы с графикой.
Для того чтобы было удобнее работать со строкой текста, я оформил ее в виде константы, потому что обращаться к тексту придется дважды. Если я захочу изменить надпись, то достаточно будет изменить только константу.
Следующим этапом я хочу узнать, какой размер будет занимать надпись на форме. Это мне нужно, чтобы рассчитать положение текста так, чтобы он оказался ровно посередине экрана. Для определения размера текста используется метод MeasureString(). Метод получает два параметра: строку текста и шрифт. В зависимости от типа и размера шрифта, размер текста может очень сильно различаться. В нашем примере в качестве шрифта передается Font, который является свойством текущей формы.
Теперь можно рассчитать позицию текста так, чтобы он расположился точно в центре окна. Расчеты сохраняются в переменной p, которая имеет тип PointF. Этот тип определяет точку левого верхнего угла текста с помощью двух полей: X и Y, которые представляют собой числа с плавающей точкой (вот они нам и встретились).
Последним этапом я отображаю текст. Существует несколько перегруженных вариантов метода рисования текста DrawString(). Я выбрал вариант, который принимает следующие параметры:
- текст, который нужно отобразить;
- шрифт;
- кисть;
- позицию в виде структуры PointF.
Самое интересное тут — третий параметр. В коде я передаю в нем значение SystemBrushes.WindowText, где SystemBrushes является перечислением, которое состоит из системных цветов. В нашем примере выбран цвет WindowText, которым система по умолчанию рисует текст в окнах.
Метод Invalidate() заставляет форму вызвать событие Paint. На самом деле перерисовка окна состоит из двух событий: прорисовки фона и прорисовки содержимого. Мы обрабатываем событие только прорисовки содержимого. Событие прорисовки фона PaintBackground по умолчанию окрашивает фон цветом, который выбран в свойстве BackColor формы.
Как принудительно вызвать событие Paint для формы?
Вопрос один - КАК? Пожалуйста не вбивайте в гугле так как я нихчего не нашёл кроме ведра говна в.
Как сделать перерисовку изображения в обработке условий Paint?
private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) < .
Событие Paint
Доброго времени суток! Задача: прорисовывать на объекте TPanel картинку. Код: HDC .
событие Paint
Помогите пожалуйста через событие Paint нарисовать вот такой рисунок. Желательно было если каждая.
Где вместо "А здесь код для рисования графика" пишите методы для рисования.
Например нарисовать линию можно так:
Извините, видимо не совсем внятно выразился. Мне вобщем-то и нужно перерисовывать, насколько я понимаю.
Мне нужно создать что-то типа осциллографа на экране. Считываем массив данных -> рисуем весь массив в виде графика. Считали новый массив -> перерисовали и т.д.
Вроде нашел в msdn функции Invalidate, Update и Refresh. Только не пойму какая из них мне нужна и можно ли применить их для перисовки только одного объекта Picture Box, в котором у меня происходит все рисование, оставив в покое остальную форму. Мне вобщем-то и нужно перерисовывать, насколько я понимаю. Paint не рисует. Paint - это событие, происходящее при перерисовании! Чтобы при каждом тике рисовался новый график, нужно:
1). Создать графику
2). Очистить панель от предыдущего графика (например белым цветом)
Разобрался и сделал так:
Событие Paint
Подскажите пожалуйста, за что отвечает событие Paint и как оно работает.
Событие Paint
Здравствуйте! Не могу это объяснить: почему при изменении размеров окна перетаскиванием за правый.
Событие Paint
Здравствуйте. Возникла такая проблема: не вызывается событие Paint в Windows Forms'е. Я не могу.
Событие Paint на форме
Приветствую друзья. Есть программка для построения графиков. Вариант выбора: интерполяция либо.
А что, если нужно нарисовать что-то на форме вне обработчика события Paint — например, по нажатию кнопки? Как получить объект Graphics, который станет поверхностью рисования нужного нам элемента управления или формы? Существует несколько способов сделать это, но мы рассмотрим только два, наиболее удобных с моей точки зрения.
Создайте новое приложение, положите на его поверхность кнопку и напишите следующий код, выполняемый по ее нажатию:
Чтобы получить объект для рисования, в этом примере используется статичный метод FromHwnd() класса Graphics. Методу нужно передать свойство Handle окна, объект рисования которого вы хотите получить, а сам объект мы получаем в качестве результата работы метода.
Теперь мы можем рисовать на поверхности объекта рисования. Для примера я рисую прямоугольник с помощью метода DrawRectangle(). Этому методу передаются два параметра: перо (класс Pen), с помощью которого происходит рисование, и размеры в виде структуры Rectangle. С помощью класса Pen мы можем задать цвет и ширину пера (толщину получаемой линии). Мы пока с перьями не разбирались, поэтому я воспользовался системным пером под именем ActiveBorder из перечисления SystemPens. Перечисление SystemPens содержит системные перья, и перо ActiveBorder служит для рисования контуров окон.
В чем недостаток рисования по событию, отличному от события Paint? Непостоянность результата. Запустите пример и попробуйте нажать на кнопку. Прямоугольник появился, и пока вроде бы все прекрасно. А что, если переместить окно? Нарисованный прямоугольник снова на месте. А что, если свернуть окно и развернуть его заново? Наш рисунок исчезнет! До этого система запоминала наше окно и при перемещении окна сама восстанавливала его содержимое. Вы даже можете попытаться перекрыть свое окно другим окном, а потом убрать его, и, вполне вероятно, что прямоугольник снова окажется на своем месте. ОС пытается оптимизировать работу графики и сама восстанавливает рисунок формы. Но это не всегда так.
В этом случае по нажатию кнопки значение переменной bDrawRectangle изменяется на true и вызывается метод Invalidate(), который заставляет форму перерисоваться. По событию Paint прямоугольник рисуется, только если переменная bDrawRectangle установлена в true. Теперь этот прямоугольник никуда не денется, даже если окно восстановят из свернутого состояния.
Да, я же обещал вам показать два способа получения объекта для рисования. Второй способ заключается в использовании метода CreateGraphics() формы:
Этот метод возвращает объект рисования для формы или элемента управления, для которого он был вызван. В данном случае он вызывается для this, а значит, вернет объект рисования текущей формы.
Читайте также: