IsDialogMessage отфильтровывает некоторые из сообщений, но позволяет большинству сообщений попадать в часть TranslateMessage / DispatchMessage цикла обработки сообщений и отправляться нормально.
Причина, по которой IsDialogMessage должен обрабатывать некоторые сообщения, заключается в том, что сообщения должны были быть доставлены в неправильное окно.
Рассмотрим - обычно - сообщения о нажатии клавиш доставляются в элемент управления с фокусом. Однако нажатие клавиши Tab предназначено для перемещения фокуса на следующий элемент управления в диалоговом окне.
Вместо того, чтобы заставлять каждый элемент управления обрабатывать вкладки, IsDialogMessage отлавливает нажатия клавиш вкладок до того, как они доставляются фактическому текущему фокусированному элементу управления, и гарантирует, что код диалогового окна обрабатывает логику вкладок.
Большинство других сообщений - наведение мыши, рисование и т. Д. - все равно будут доставлены в диалоговое окно proc - и обрабатываются в обычном режиме. На самом деле это просто подмножество сообщений, предназначенных для отправки элементам управления, но которые должны обрабатываться диалоговым окном, которое IsDialogMessage отфильтровывает и обрабатывает.