Притушить экран - проблема с GetSysColor
От: Slav  
Дата: 16.05.03 21:51
Оценка:
Захотелось в обычном 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 — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью.

Вот так.

Slav.
Re: WINVER >=0x0501 - углубление темы
От: Slav  
Дата: 16.05.03 22:57
Оценка:
почитал такой маленький и симпатичный файлик — 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.
Re: Притушить экран - проблема с GetSysColor
От: _Nikolas Россия  
Дата: 16.05.03 23:06
Оценка: 2 (1)
Здравствуйте, Slav, Вы писали:

В stdafx.h замени строчку #define WINVER 0x0400 н #define WINVER 0x0500.

Удачи.
Re: Притушить экран - проблема с GetSysColor
От: Serguei666 Беларусь  
Дата: 16.05.03 23:12
Оценка:
Здравствуйте, 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 — кто в трусах, кто в майке: вообще, конь не валялся — половина элементов сверкает своими первозданными цветами и яркостью.

Бывает. Вы же еще не закончили работу.
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: Притушить экран - проблема с GetSysColor
От: _Nikolas Россия  
Дата: 16.05.03 23:14
Оценка: 3 (1)
Здравствуйте, _Nikolas, Вы писали:

_N>В stdafx.h замени строчку #define WINVER 0x0400 н #define WINVER 0x0500.


Сори, не заметил предыдущее сообщение.

#define _WIN32_IE 0x0500 не пробовал?

Удачи.
Re[2]: WINVER >=0x0501 - углубление темы
От: Serguei666 Беларусь  
Дата: 16.05.03 23:24
Оценка: 1 (1)
Здравствуйте, 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>Может быть, я, вообще, не потому пути пошёл? Подскажите, кто как такую задачу решал.

Дык яркость на мониторе подкрутить.
Хотите сказать 'спасибо'? Тогда поставьте оценку
Re[2]: Притушить экран - проблема с GetSysColor
От: Slav  
Дата: 16.05.03 23:39
Оценка:
Здравствуйте, 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.
P.S.
Сергей, а Вы в каком часовом поясе?
Re[3]: Притушить экран - проблема с GetSysColor
От: Serguei666 Беларусь  
Дата: 17.05.03 00:17
Оценка:
Здравствуйте, 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)
Хотите сказать 'спасибо'? Тогда поставьте оценку
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.