У меня есть предположение, что может исправить ситуацию.
Сейчас в libTextControl.mir имеется один глобальный кеш иконок, в котором хранятся метафайлы на каждую иконку. Однако, при "доставании" этой иконки из этого кеша делается CopyEnhMetaFile, что каждый раз создает копию этого метафайла в памяти для каждого экземпляра любой иконки в тексте. Вот она и утечка.
Вероятно:
- вариант 1 - надо делать еще кеш второго уровня, привязанного к HWND окна, чтобы для каждого HWND создавалась только одна копия метафайла из глобального кеша для каждой HICON. При закрытии окна просто убивать экземпляр этого второго кеша.
- вариант 2 - в глобальном кеше держать как ключ пары {HICON, HWND} - и возвращать оттуда "оригинал метафайла" для каждого конкретного HWND, не делая копий вообще. При закрытии окна вычищать из глобального кеша все записи, связанные с закрываемым HWND
Завтра попробую проверить это предположение, пропатчив эту либу соответствующим образом, чтобы хотя бы на одном окне работало.
---------------
Этого мало, но стало еще более понятно, как это починить, кешировать вообще не это надо.