Класс окна описывает свойства, которые будут использоваться для всех экземпляров этого класса. Помимо цветов, значков и т. Д., Одним из этих свойств является процедура окна. Это функция обратного вызова, которая отвечает за обработку всех сообщений из системы и их обработку по мере необходимости.
Хотя это не связано с концепцией, она аналогична классам C ++ - один фрагмент кода определяет данные и функциональные возможности класса, и может быть много экземпляров этого класса.
В качестве очень грубого примера класс "BUTTON" WndProc переводит последовательность WM_LBUTTONDOWN/WM_LBUTTONUP
как "щелчок". Во время этой последовательности WndProc также раскрасит кнопку в «нажатом» состоянии в ответ на сообщение WM_PAINT
.
Если окну необходимо сообщить о действии родителю (например, щелчком мыши), оно отправляет сообщения в виде «уведомлений» или «команд». Эти сообщения создаются дочерним элементом управления вручную и содержат идентификатор и все соответствующие данные.
Преимущество всего этого, просто создав окно (используя CreateWindow) класса кнопок, я получаю все это поведение автоматически.
Наряду с теми, что предоставляются окнами, я также могу создавать свои собственные окна, которые можно возобновить во всем приложении. Вы должны зарегистрировать хотя бы один класс для своего главного окна (иначе оно не будет иметь функциональных возможностей, поэтому не будет очень интересным), но помимо этого, это зависит от вас.
Вполне возможно иметь приложения, которые содержат только обычные элементы управления (кнопки, списки, индикаторы выполнения), но бывают случаи, когда вы можете захотеть создать собственный класс. Это может быть либо для инкапсуляции определенного поведения, либо потому, что вы хотите использовать множество экземпляров этого элемента управления в своей программе.
Например, если для пользовательского интерфейса моего приложения требуются изображения жирафов, которые вращаются, когда над ними находится мышь, я могу написать код для этого в WindowProcedure и зарегистрировать его как новый класс («SPINNYGIRAFFE»). Остальная часть моего приложения просто создает окна класса «SPINNYGIRAFFE», и все просто работает.