Tatyana Entin Ответов: 1

Значки 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 бит используются для альфа-канала, который определяет прозрачность.

1 Ответов

Рейтинг:
0

Rick York

Это настоящий снимок в темноте, но проверьте значки и посмотрите, как выглядит их альфа-канал. Если он полностью черный, то они вероятно быть истолковано как полностью прозрачное.


Tatyana Entin

Значок рисуется нормально, хотя и не в режиме "расширенного мульти-дисплея".

Дескриптор DeviceContext я беру из DirectDraw surface (DirectX9).
Я использую значения по умолчанию при создании основных/задних поверхностей. Возможно, мне нужно настроить для него некоторые поля "битовой глубины"?