Windows API - Как дождаться полного обновления ListView? - PullRequest
0 голосов
/ 27 января 2020

Я хочу иметь возможность подождать или получить какой-то ответный вызов, когда рабочий стол Windows закончил рисовать / полностью обновился.

Мой проект о создании анимации с иконками на рабочем столе , Да, я знаю, что это злоупотребляет API windows как сумасшедшие. Я использую этот проект с большим эффектом как способ узнать больше о C ++ и Windows API.

В моем коде у меня есть две фазы. У меня есть часть, которая "загружает значки". Это просто копирование .ico файлов в C:\Users\Username\Desktop. Второй шаг - серия вызовов API windows для изменения положения значков. Я получаю HWND на рабочем столе, а затем LVM_GETITEM, чтобы узнать, какой значок я обновляю, и, наконец, LVM_SETITEMPOSITION, чтобы изменить положение.

Моя проблема между этими шагами. Мой код позиционирования работает только тогда, когда значки уже на экране. Когда я пытаюсь запускать их один за другим, рабочий стол остается пустым, поскольку значки еще не загружены в ListView из моей операции копирования файлов. Поэтому LVM_GETITEMCOUNT равно 0 в точке, где я хотел бы расположить значки.

Мне нужен способ ожидания до точки, где рабочий стол был полностью обновлен, чтобы запустить мой код позиционирования значков ListView. , Все различные способы обновления sh рабочего стола только отправляют сообщение на рабочий стол для обновления sh, не дожидаясь обновления рабочего стола. Вот что я уже пробовал:

  • Использование RedrawWindow для форсирования WM_PAINT сообщения.
  • SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_FLUSH, 0, 0); Я получаю небольшую задержку, так как она запускается, но ее нет Достаточно для загрузки значков, поэтому это не правильная задержка.
  • Отправка WM_SETREDRAW 0, а затем отправка 1.
  • Убийство explorer.exe (плохо и по многим другим причинам)

Спасибо за любую помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...