Ответ 1
WndProc() очень, очень важно, как работает окно Windows. Это метод управляемой оболочки вокруг оконной процедуры, функция, которая раньше была написана на C. Это то, как вы настраиваете поведение окна, чтобы он реагировал по-разному на уведомления, созданные операционной системой или другими программами.
Обычно вам не нужно переопределять его, метод WndProc() в базовом классе обрабатывает большинство основных уведомлений. Превращение их в дружественные .NET-события, такие как Click и т.д. Но это еще не так, потому что уведомление слишком неясное или обязательно так, потому что оно ничего не знает о сообщениях, используемых пользовательским окном. В этом случае вы можете отказаться от переопределения WndProc(), чтобы перехватить сообщение. Лучший пример, о котором я могу думать, - создать окно без полей для рисования пользовательского оконного фрейма и по-прежнему давать нормальное поведение в окне. Наиболее легко сделать, перехватывая сообщения, такие как WM_NCHITTEST, не обернутые .NET.
Поистине grokking WndProc() требует чтения оригинальной книги Петцольда "Программирование Windows". Возможно, сегодня это не так просто понять, он предполагает базовое понимание языка C. Какой язык был ориентирован на winapi 30 лет назад, объектно-ориентированные языки не были широко распространены или доступны в то время. Это также объясняет, почему писать код внутри WndProc() довольно болезненно, очень мало абстракции, и вы не можете игнорировать указатели.
Microsoft сделала попытку уйти в отставку, начиная с Windows 8 и WinRT api. Не совсем удачный успех, может быть, Windows 10 придаст ему некоторую тягу. Основополагающая технология, которая заставляет WinRT работать под капотом, - это COM, большой шаг вверх от C, потому что он может поддерживать объектную модель. Хотя он хорошо скрыт в дружественных языковых прогнозах, COM-программирование - это то, что большинство программистов постараются избежать:)