Еще одна альтернатива
for(String serverId : serverIds) {
sb.append(",");
sb.append(serverId);
}
sb.deleteCharAt(0);
Очевидно «приложение не должно вызывать SetSystemPaletteUse, если оно не имеет развернутое окно и фокус ввода» . Возможно какая-то другая программа плохо себя ведет. Такое описание очень похоже на то, что Microsoft надеется, что все программы будут сотрудничать, и не предлагает способа заставить их к этому. Это как вернуться в Windows 3.1. :)
Случайное предложение: пробовали ли вы SetSystemPaletteUse с параметром SYSPAL_NOSTATIC256?
Вы также можете увидеть, содержит ли ваша палитра 20 зарезервированных цветов Windows; если это так, это означает, что любой другой программе с палитрой, которая просто использует цвета Windows, не нужно будет изменять палитру, чтобы отрисовать себя, насколько я понимаю.
Вы можете сделать «простой» обходной путь. Поскольку ваша игра - старая игра, она, вероятно, не соответствует текущему оборудованию, поэтому этот трюк будет работать:
Это потребует минимальных изменений в вашей игре, и полностью избавиться от проблем с палитрой, хотя ваша игра по-прежнему может использовать все свои хитрости с палитрой
R
Я вообще не знаю DirectX, но я бы предложил попробовать сделать рендеринг за пределами экрана, а затем преобразовать в глубину дисплея ... Я полагаю, что вы можете заставить Direct2D сделать все это за вас...