#winforms #paint
#winforms #Краски
Вопрос:
Есть ли документация по циклу рисования в WinForms?
Когда я программирую в Windows, цикл рисования обычно имеет вид:
sent a WM_PAINT message
{
call BeginPaint(amp;paintStruct)
//BeginPaint sends WM_NCPAINT and WM_ERASEBKGND
sent a WM_ERASEBKGND message
{
i can:
- allow default processing (Windows will fill the area with the default background color (e.g. white)
- erase and background myself (e.g. a gradient) and prevent default processing
- do nothing (letting whatever was there before me stay there) and prevent default processing
}
perform whatever painting i desire on
paintStruct.hDC (Device Context)
paintStruct.rcPaint (Invalid Rectangle)
that was populated into paintStruct during BeginPaint
call EndPaint()
}
Все это задокументировано в MSDN: Windows Development Graphics and Multimedia Windows GDI Painting and Drawing О рисовании
я не могу найти никакой подобной документации о WinForms и ее цикле рисования. я могу случайным образом находить методы и события, в которых есть название paint:
OnPaint
(защищенный метод «вызывает событие рисования».)OnPrint
(защищенный метод «вызывает событие рисования».)- InvokePaint (защищенный метод «Вызывает событие рисования для указанного элемента управления».)
Paint
(публичное мероприятие)InvokePaintBackground
(защищенный метод «Вызывает событие PaintBackground для указанного элемента управления».)OnPaintBackground
(защищенный метод «Рисует фон элемента управления».)
Примечание: Игнорирование факта отсутствия
PaintBackground
события
Существует ли документация, описывающая взаимосвязь проектирования между этими объектами? Есть ли документация по циклу рисования в WinForms?
Ответ №1:
Он существенно не отличается от собственного цикла рисования Windows, the .СЕТЕВЫЕ события вызываются соответствующими сообщениями Windows. Начиная с самого низа, сообщения генерируются вызовом InvalidateRect() либо оконным менеджером, либо самим приложением. Версия .NET является контрольной.Аннулировать(). Windows отслеживает область обновления для окна, решая, следует ли доставлять сообщения WM_PAINT, WM_NCPAINT и WM_ERASEBKGND.
Сообщения WM_PAINT и WM_ERASEBKGND распознаются элементом управления.WndProc() при вводе элементов управления.Включен пользовательский стиль рисования. Он вызывает виртуальные методы OnPaint() и OnPaintBackground(). Производный элемент управления может переопределять эти методы для настройки рисования по мере необходимости. И должен вызывать базовый метод. В конечном итоге это достигает элемента управления.Метод OnPaint / Background, который запускает события Paint и PaintBackground, чтобы позволить другому коду настраивать рисование.
Единственным другим недостатком является двойная буферизация, включаемая свойством DoubleBuffered. Winforms создает буфер растрового изображения для элемента управления и запускает OnPaintBackground() и OnPaint(), передавая графический объект, созданный на основе этого растрового изображения. Затем растровое изображение выводится на экран.
Комментарии:
1.Здесь мы начинаем сталкиваться с нехваткой документации, но
UserPaint
в документации говорится: «Если false , событие рисования не вызывается». Означает ли это, чтоPaint event
не вызывается? Или это означает, чтоOnPaint
метод не будет вызван? Я замечаюOpaque
(«Если true, элемент управления отображается непрозрачным, а фон не окрашен») Повлияет ли это как-нибудь наOnPaintBackground
. И я вижу больше:AllPaintingInWmPaint
OptimizedDoubleBuffer
.2. я собираюсь принять ответ Джейсона. Строго говоря, я просил документацию. И хотя документации MSDN может быть чрезвычайно недостаточно, это то, что я искал. Хотя этот ответ очень полезен ( 1) в качестве дополнения к MSDN.
Ответ №2:
Это то, что вы ищете?
MSDN: рисование и рендеринг пользовательского элемента управления
OP Edit: когда Microsoft реализует следующий этап разрыва ссылок, документация находится в:
- Библиотека MSDN
- Инструменты и языки разработки
- Visual Studio 2010
- Visual Studio
- Создание приложений на базе Windows
- Windows Forms
- Начало работы с Windows Forms
- Элементы управления Windows Forms
- Разработка пользовательских элементов управления Windows Forms с помощью .NET Framework
- Пользовательское управление рисованием и визуализацией
- Разработка пользовательских элементов управления Windows Forms с помощью .NET Framework
- Элементы управления Windows Forms
- Начало работы с Windows Forms
- Windows Forms
- Создание приложений на базе Windows
- Visual Studio
- Visual Studio 2010
- Инструменты и языки разработки