После вызова функции InvalidateRect я заметил, что окно области уведомлений перерисовывается (потому что окно мигает на мгновение), поэтому перерисовка окна не является правильным решением для решения этой проблемы ...
Однако в следующей теме я нашел решение:
Дело в том, что для «правильного» обновления размера области уведомлений, чтобы удалить все пустые места из ранее удаленных кнопок, мне просто нужно отправить WM_LBUTTONDOWN и WM_LBUTTONUP сообщения через функцию SendMessage .
Эти сообщения окна должны быть отправлены два раза (по крайней мере для Windows 10) в окно ToolbarWindow32 в следующем порядке: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDOWN, WM_LBUTTONUP. Это делается для того, чтобы воспроизвести два отдельных щелчка (а не двойной щелчок) на первой кнопке внутри панели задач, что мне и нужно было сделать вручную перед применением этого автоматизированного решения. После отправки сообщений окно становится «автоматически изменяемым».
Единственная эстетическая проблема может быть, если первая кнопка - это кнопка из приложения, которое выполняет какое-то нежелательное действие, совершая один щелчок по ее кнопке, но это не типично для просмотра. Обычно пользователь может сделать только двойной щелчок, чтобы восстановить окно с помощью кнопки на панели задач, или щелкнуть правой кнопкой мыши, чтобы открыть его контекстное меню, но ничего не должно произойти, если сделать один щелчок по кнопке ... если разработчик ничего не запрограммировано.
Обратите внимание, что эта методология также работает, когда есть стрелка вверх, которая содержит "скрытые" кнопки.