Все, питання знято. Я розібрався.
ImageList_ReplaceIcon() повертала помилку -1, тому що у ImageList_Create() 3-й параметр на довжину списку не впливає.
Вона точно працює, але не створює масив з заданої кількості елементів. Тому елементи треба додавати, якщо ImageList_ReplaceIcon() то з другим параметром -1. Але і це ще не все. Навіть не думав і не очикував що мелкософт таке начаклує.
Список іконок має починатися обов'язково з 0. Тобто ресурсу IDC_MYICON в resource.h одразу можна задавати 0, та використовувати його замість змінної ImageListID. Це одне й те саме. Ресурс IDC_MYICON більше ніде не фігурує, тобто він формальний, але мелкософт вірогідно його використовує для себе. Тому і додає в проект по замовченюю.
Далі в файлі список іконок має продовжуватись (з 1!) та не розриватись. Першою іконкою треба ставити головну яка відображає іконку програми. Якщо цього не зробити, то системна іконка (16x16) створеної програми буде містити саме ту що стоїть першою. (В мене там одна іконка замість двох, одну з яких small воно саме робить).
Далі краще додати іконку яка буде використовуватись як заповнювач для розділювача BTNS_SEP, бо його все одно треба мати.
Далі з продовженням послідовної нумерації розташовуємо опис своїх іконок.
Потім в програмі робимо заповнення масиву. В нас попереду 3 елемента які треба заповнити:
1 - місто для іконки програми (яку я так розумію wcex.hIconSm потім і використовує як першу в ресурсі-списку IDC_MYICON),
2 - місто для іконки пустушки (яка в мене IDI_EMPTY і вона існує як файл (в мене Empty.ico) і прикріплена до проекту),
3 - місто для розділювача (не плутати з ресурсом номер 3)!
Тобто 3 рази:
ImageList_ReplaceIcon(hImageList, -1, LoadIconW(hInst, MAKEINTRESOURCEW(IDI_EMPTY)));
Весь блок:
for (size_t i{}; i < 3; ++i) {
ImageList_ReplaceIcon(hImageList, -1, LoadIconW(hInst, MAKEINTRESOURCEW(IDI_EMPTY)));
}
for (size_t i{}; i < numButtons; ++i) {
ImageList_ReplaceIcon(hImageList, -1, LoadIconW(hInst, MAKEINTRESOURCEW(IDI_OPEN + i)));
}
IDI_OPEN це ресурс з номером 3, з якого наприклад може починається блок основних іконок.
Отак це працює.
Ще є проблеми з підкладкою. Окантовка іконок на прозорому фоні які я використовую мають чорний фон на кнопках.