Захотелось в обычном MDI приложении программно (через меню) "затемнить" экран. Ну, пользователи (специфика такая — для моря что-то клепаем) жалуются, что ночью в полной темноте слишком всё ярко. В общем, проблем-то нет — берём SetSysColor и красим-тушим, как душа пожелает (не забыв потом всё возвернуть взад). Потушил почти всё, что хотел, но в конце полезли неприятности:
1.Обращение к COLOR_GRADIENTACTIVECAPTION, например вызывает ошибку сомпиляции C2065: COLOR_GRADIENTACTIVECAPTION' : undeclared identifier. Ну, просто праздник какой-то (пятница же!).
— Как это, "неизвестный"! А в winuser.h цифра 27 для кого писана?
Правда, там перед этим блоком стоит зловещая строка: #if(WINVER >= 0x0500). А я кто, по-вашему тогда?
Ну, и что теперь делать? Это вся колбасня происходит на XP Home edition. Цветовая схема — Windows classic. VS7.
У кого какие будут мнения?
Пробовал по-ламерски добавить #define _WIN32_WINNT 0x0501
Получил такой же ламерский ответ: редефинишион у нас, понимаешь!
2. Про рисунки на кнопках и иконках я пока молчу — не до жиру. Хотя, тоже задача стоит.
3. Переключаюсь в цветовую схему XP — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью.
почитал такой маленький и симпатичный файлик — stdafx.h — да и изменил пару строк:
#define _WIN32_WINNT 0x0500
#define _WINWER 0x0500
градиент стал признанным, однако, когда захотелось большего:
#define _WIN32_WINNT 0x0501
#define _WINWER 0x0501
то вылезла ошибка
Visual Studio .NET\Vc7\atlmfc\include\afxcmn3.inl(18): error C2065: 'CCM_SETWINDOWTHEME' : undeclared identifier
Что с этим-то делать?
Остальные проблемы (см. ниже) остаются.
S>2. Про рисунки на кнопках и иконках я пока молчу — не до жиру. Хотя, тоже задача стоит.
S>3. Переключаюсь в цветовую схему XP — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью.
Да, ещё всё так радостно один элемент (неизвестный науке зверь) не поддаётся перекрашиванию — такая вертикальная полоска-выпуклость на левом краю ToolBar. Мне показалось, что на языке windows она обзывается как "single-grip handle". Но я не уверен в правильности названия. А затемнить её надо. Сверкает так, что глаза слезятся.
Может быть, я, вообще, не потому пути пошёл? Подскажите, кто как такую задачу решал.
Здравствуйте, Slav, Вы писали:
S>Захотелось в обычном MDI приложении программно (через меню) "затемнить" экран. Ну, пользователи (специфика такая — для моря что-то клепаем) жалуются, что ночью в полной темноте слишком всё ярко.
А яркость на экране уменьшать вы им не посоветовали?
В общем, проблем-то нет — берём SetSysColor и красим-тушим, как душа пожелает (не забыв потом всё возвернуть взад). Потушил почти всё, что хотел, но в конце полезли неприятности: S>1.Обращение к COLOR_GRADIENTACTIVECAPTION, например вызывает ошибку сомпиляции C2065: COLOR_GRADIENTACTIVECAPTION' : undeclared identifier. Ну, просто праздник какой-то (пятница же!). S>- Как это, "неизвестный"! А в winuser.h цифра 27 для кого писана? S>Правда, там перед этим блоком стоит зловещая строка: #if(WINVER >= 0x0500). А я кто, по-вашему тогда? S>Ну, и что теперь делать? Это вся колбасня происходит на XP Home edition. Цветовая схема — Windows classic. VS7. S>У кого какие будут мнения?
Что-то у вас не так. Можете код показать?
Попробуйте сделать Визардом простое пустое приложение и вставьте туда строку "GetSysColor(COLOR_GRADIENTACTIVECAPTION);"
И посмотрите, откомпилируется или нет. Если откомпилируетса, то ищите, что у вас в project settings разное.
S>Пробовал по-ламерски добавить #define _WIN32_WINNT 0x0501 S>Получил такой же ламерский ответ: редефинишион у нас, понимаешь!
Лучше этого не делать.
S>2. Про рисунки на кнопках и иконках я пока молчу — не до жиру. Хотя, тоже задача стоит.
А чего? Это несложно.
S>3. Переключаюсь в цветовую схему XP — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью.
Бывает. Вы же еще не закончили работу.
Здравствуйте, Slav, Вы писали:
S>почитал такой маленький и симпатичный файлик — stdafx.h — да и изменил пару строк: S>#define _WIN32_WINNT 0x0500 S>#define _WINWER 0x0500 S>градиент стал признанным, однако, когда захотелось большего: S>#define _WIN32_WINNT 0x0501 S>#define _WINWER 0x0501 S>то вылезла ошибка S>Visual Studio .NET\Vc7\atlmfc\include\afxcmn3.inl(18): error C2065: 'CCM_SETWINDOWTHEME' : undeclared identifier
S>Что с этим-то делать?
Исправлять.
Что-то у вас с проектом не так.
S>Остальные проблемы (см. ниже) остаются.
Пустой проект генерировать пробовали?
S>Да, ещё всё так радостно один элемент (неизвестный науке зверь) не поддаётся перекрашиванию — такая вертикальная полоска-выпуклость на левом краю ToolBar. Мне показалось, что на языке windows она обзывается как "single-grip handle". Но я не уверен в правильности названия. А затемнить её надо. Сверкает так, что глаза слезятся.
S>Может быть, я, вообще, не потому пути пошёл? Подскажите, кто как такую задачу решал.
Дык яркость на мониторе подкрутить.
Здравствуйте, Serguei666, Вы писали:
S>А яркость на экране уменьшать вы им не посоветовали?
Ну, почему же, Сергей, это был мой первый вопрос к постановщику задач. Ответ прост — не все мониторы это позволяют. Где они нашли такие мониторы, я уже не спрашивал. Наверное, где-то нашли.
S>Что-то у вас не так. Можете код показать? S>Попробуйте сделать Визардом простое пустое приложение и вставьте туда строку "GetSysColor(COLOR_GRADIENTACTIVECAPTION);" S>И посмотрите, откомпилируется или нет. Если откомпилируетса, то ищите, что у вас в project settings разное.
Все разборки идут на пустом "тестовом" приложении — к этому я уже давно пришёл.
А последние вести с фронта такие:
если в stdafx.h поставить такие значения:
#define _WIN32_WINNT 0x0501
#define _WINWER 0x0501
то вылезла ошибка
Visual Studio .NET\Vc7\atlmfc\include\afxcmn3.inl(18): error C2065: 'CCM_SETWINDOWTHEME' : undeclared identifier
S>>2. Про рисунки на кнопках и иконках я пока молчу — не до жиру. Хотя, тоже задача стоит. S>А чего? Это несложно.
Вот я и думаю: раз нет доступа к рисункам на кнопках через список "display elements" SetSysColor, то тогда как? Подскажи цепочку, плиз.
S>>3. Переключаюсь в цветовую схему XP — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью. S>Бывает. Вы же еще не закончили работу.
Ну, тогда я не знаю — на тестовом приложении я ВСЕ элементы сделал черными, но при XP схеме 5 элементов вновь светлые. Наверное, дело в оставшихся двух — COLOR_MENUBAR and COLOR_MENUHILIGHT, но с ними пока не получается — для них нужно указать
#define _WIN32_WINNT 0x0501
#define _WINWER 0x0501
а это вызывает ошибку — см. выше.
Здравствуйте, Slav, Вы писали:
S>Здравствуйте, Serguei666, Вы писали:
S>>А яркость на экране уменьшать вы им не посоветовали? S>Ну, почему же, Сергей, это был мой первый вопрос к постановщику задач. Ответ прост — не все мониторы это позволяют. Где они нашли такие мониторы, я уже не спрашивал. Наверное, где-то нашли.
Понатное дело. Это я в порядке шутки.
S>>Что-то у вас не так. Можете код показать? S>>Попробуйте сделать Визардом простое пустое приложение и вставьте туда строку "GetSysColor(COLOR_GRADIENTACTIVECAPTION);" S>>И посмотрите, откомпилируется или нет. Если откомпилируетса, то ищите, что у вас в project settings разное. S>Все разборки идут на пустом "тестовом" приложении — к этому я уже давно пришёл. S>А последние вести с фронта такие: S>если в stdafx.h поставить такие значения: S>#define _WIN32_WINNT 0x0501 S>#define _WINWER 0x0501 S>то вылезла ошибка S>Visual Studio .NET\Vc7\atlmfc\include\afxcmn3.inl(18): error C2065: 'CCM_SETWINDOWTHEME' : undeclared identifier
Выходит, у меня пустое приложение компилируется, а у вас нет? Тогда возникает вопрос 'почему'. У меня Visual Studio 6, кстати.
И еще — вы не должны у себя эти макросы переопределять. Я, по крайней мере, про такой способ решения никогда не слыхал.
S>>>2. Про рисунки на кнопках и иконках я пока молчу — не до жиру. Хотя, тоже задача стоит. S>>А чего? Это несложно. S>Вот я и думаю: раз нет доступа к рисункам на кнопках через список "display elements" SetSysColor, то тогда как? Подскажи цепочку, плиз.
У вас иконки на кнопках? Тогда:
1) Или иметь набор иконок для "приглушенного" режима и использовать его
2) Или рисовать все кнопки ручками, сделав их OwnerDraw и затемняя иконку прямо перед выводом на экран
S>>>3. Переключаюсь в цветовую схему XP — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью. S>>Бывает. Вы же еще не закончили работу. S>Ну, тогда я не знаю — на тестовом приложении я ВСЕ элементы сделал черными, но при XP схеме 5 элементов вновь светлые. Наверное, дело в оставшихся двух — COLOR_MENUBAR and COLOR_MENUHILIGHT, но с ними пока не получается — для них нужно указать S>#define _WIN32_WINNT 0x0501 S>#define _WINWER 0x0501 S>а это вызывает ошибку — см. выше.
А какие элементы вм не удалось перекрасить?
S>Slav. S>P.S. S>Сергей, а Вы в каком часовом поясе?
Я в Вашингтоне, Округ Коламбия. Московское-8 часов (GMT-5, Eastern Time)