Значки 32-битной глубины становятся видимыми/невидимыми при переключении режима множественных дисплеев "extended"/”non-extended” в windows7
Значки 32-битной глубины становятся невидимыми при подключении второго дисплея и выборе параметра "Панель управления\дисплей\изменить настройки дисплея\несколько дисплеев: расширить эти дисплеи".
Я рисую значки в своем приложении MFC\C++\ATL Windows с помощью
::Функция DrawIconEx( гдх, х, г, hIcon,Ж,Ч,нуль,нуль, DI_NORMAL) API-интерфейс.
Ручка значка в памяти передается извне.
Дескриптор DeviceContext я беру из DirectDraw surface ( мы рисуем сложную сцену с помощью DirectX 9.0 DirectDraw ).
Значок рисуется нормально, хотя его глубина меньше 32 бит.
Я использую значения по умолчанию при создании основных/задних поверхностей. Вероятно, мне нужно настроить для него некоторые поля "битовой глубины"...
Есть идеи? Заранее спасибо!
Татьяна
Что я уже пробовал:
Мои пользовательские 4-8-16-24-битные иконки в порядке.
Я тестировал на Win10 и столкнулся с той же проблемой .
Stefan_Lang
Пожалуйста, будьте немного более подробны в своей проблеме и имейте в виду, что мы понятия не имеем о вашем проекте, вашей среде разработки, библиотеках и функциях, которые вы используете, о том, чего вы хотите достичь, и о коде, который вы написали, чтобы попытаться достичь своей цели (целей).
Единственный совет, который я могу предложить: не используйте однобуквенные имена (ссылаясь на "f.i." в единственном фрагменте кода, который вы предложили до сих пор). Имя переменной или типа должно дать вам представление о том, что это такое или для чего оно используется, без необходимости искать его определение.
Но это вряд ли решит вашу проблему...
Tatyana Entin
Большое спасибо. Я обновил свой вопрос. Теперь это понятно?
С уважением
Stefan_Lang
Да, теперь это имеет гораздо больше смысла. Боюсь, что я понятия не имею, как решить эту проблему, но, возможно, кто-то другой знает.
Rick York
Я согласен со Стефаном и хотел бы добавить к этому, что такое "расширенный" и "нерасширенный" режимы отображения в windows? Я программирую в windows с тех пор, как Windows NT была в бета-версии, и я никогда ничего не видел об этих режимах отображения.
Gerry Schmitz
Попробуйте другую ОС. "Расширение" подразумевает проблему обновления ОС; ничего общего с вашим кодом в частности. У меня есть расширенный рабочий стол на 3 различных мониторах в Windows 10 без каких-либо проблем с запуском всех видов вещей.
Tatyana Entin
Я не думаю, что это проблема "обновления", потому что значки с низкой глубиной цвета видны, в то время как 32-битные значки выглядят пустыми.Я вижу только ограничивающую прямую линию (которая рисуется отдельно). Я попробую в Windows10 и доложу... Как вы думаете, это ошибка Win7 GDI?
Gerry Schmitz
"Старые" ОС имеют "битовые настройки" для мониторов; Windows 10, по-видимому, нет: все мои мониторы (1920x1080)+ показывают как "8-битную глубину". Проверьте настройки дисплея. Я не собираюсь рисковать и выделять "GDI". После обширной сессии (тренажеры и др.) Я нахожу, что почти все может быть вызвано "побочными эффектами".
Stefan_Lang
Я не знаю, как решить, является ли это ошибкой или функцией, но дома у меня все еще есть Windows 7 с двумя мониторами, и я иногда получаю сообщения об ошибках, сообщающие мне что-то о несовместимости таблиц цветов, хотя Windows настроена на использование истинного цвета, а не таблицы цветов. По-видимому, Windows 7 не радуется, когда какое-то приложение пытается использовать другую настройку цвета (например, глубину цвета), даже если сам рабочий стол прекрасно может отображать что угодно.
Stefan_Lang
Мне только что пришло в голову: для настройки истинного цвета в Windows требуется только 24-битная глубина цвета. AFAIK 32 бита действительно используются только для ускорения времени доступа, а не для дополнительных битов. Может быть, этот второй монитор (или его драйвер) не поддерживает 32-битную глубину цвета?
Tatyana Entin
Я тестировал на Win10 и видел ту же проблему .
Более того : когда я подключаюсь с помощью "удаленного рабочего стола" к своему компьютеру, он ведет себя следующим образом:
1) Если режим подключения "1-дисплей" - я вижу все иконки!
2) Если режим подключения "использовать все дисплеи" - я не вижу иконок!
Так что, скорее всего, проблема находится внутри Windows...
Как бы вы поступили в такой ситуации?
с уважением
Stefan_Lang
Извините, я в растерянности. Последним графическим API Windows, к которому я прикасался, был XP. То, что я *мог бы* попробовать здесь, - это выяснить, есть ли функции для запроса графических свойств, а затем проверить, не изменяются ли они каким-то образом в зависимости от расширенных настроек. Судя по вашим наблюдениям, они это делают, но было бы неплохо знать, что меняется.
Rick York
В некоторых случаях дополнительные 8 бит используются для альфа-канала, который определяет прозрачность.