Документация по циклу рисования WinForms?

#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
                    • Пользовательское управление рисованием и визуализацией