Простая причина, по которой GetClipBox () не возвращает NULLREGION с включенным DWM, заключается в том, что вы не обрезаны! Весь смысл DWM состоит в том, что каждое окно (которое не является дочерним, например кнопки или поля редактирования) получает свой собственный буфер для рисования, поэтому окна переднего плана можно перемещать, не заполняя окна позади них.
В качестве простого примера, наведите курсор мыши на элемент окна в панели задач, когда он находится в фоновом режиме, и посмотрите, как он обновляется в окне предварительного просмотра.
Также обратите внимание, что со стеклянными краями ваше окно может быть полностью закрыто другими окнами и при этом оставаться видимым! (Вы не можете даже протестировать клиентскую область из-за расширенного стекла, как использует Windows Media Player - измените его размер до минимального размера, и вы увидите, что он использует стекло для всей своей площади!) Конечно, многослойные окна (от XP на ) и области пользовательских окон означали, что это всегда может иметь место, но теперь это значение по умолчанию.
Резюме / TL; DR:
Если вы выполняете тяжелые анимационные / причудливые эффекты и хотите уменьшить нагрузку на процессор при работе в DWM, возможно, лучшее, что вы можете сделать, это обнаружить, когда ваше приложение теряет передний план и откат к более дружественному обновлению процессора (НЕ обновлять! вы получаете WM_PAINT и игнорируете его, потому что вы находитесь в фоновом режиме, вы не получите его, когда активированы!).