Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Системное программирование и WinAPI > Как добавить манифест в программу и работать с ним |
Автор: neosapient 21.11.2006, 14:59 |
Здравствуйте. Вот попытался добавить манифест в программу, как написано в http://worldcpp.vingrad.ru/appl/windows.php Т.е. собрал HELLO_WORLD проект (по умолчанию), и начал вносить изменения. И проект даже скомпилировался, но я никаких изменений не вижу. Читал прошлые подобные вопросы, что выдал поиск, но ничего путного не нашел. Стоит добавить, что проект собираю в VС7, под WindowsXP. Вопросы 1) Прикрепленный снизу проект, он имеет манифест и был правильно скомпилирован. Так ли это - да или нет (я лично сомневаюсь, иначе не задавал вопросы)? В чем ошибки (например не виден текст "HELLO WORLD", да и диалог About не загружается. 2) По прошлым изучениям выяснил, что манифест включается только когда стоит стиль ХР, если стоит класический стиль, то ничего визуально не измениться. Так ли это - да (только при стиле ХР) или нет (при любом стиле), свой ответ. Пожалуйста, объясните мои ошибки при прикреплении манифеста и покажите рабочий вариант. |
Автор: Aleksandor 21.11.2006, 16:15 |
А http://rsdn.ru/article/winshell/themes.xml смотрел? |
Автор: neosapient 21.11.2006, 17:10 |
RSDN - тоже смотрел. Мне б простой рабочий примерчик ![]() |
Автор: BUGOR 22.11.2006, 13:03 | ||
твой манифест к программе не прилинковался, значит неправильно ![]() В остальном разбираться лениво, дам пару советов: 1. В самом начале программы вызывай такую функцию(её вызова я у тебя не нашёл): InitCommonControls(); Её вызов "заставит" подгружать dll'ку comctl32.dll, в которой собственно и "храняться" все xp'шные контролы. 2. В файле RC пропиши следующую строку: 1 24 DISCARDABLE "name_of_theme.xml" Всё, должно работать. ![]() |
Автор: neosapient 22.11.2006, 19:44 | ||
*.xml - всмысле файл манифеста *.manifest ? В ресурсах правильно не прекрипить, помогите!!! |
Автор: BUGOR 24.11.2006, 12:52 | ||
Да, манифест файл имеет структуру xml. Что значит правильно не прикрепить? Именно в ресурсы и надо манифест класть. Кстати, нужно строки в rc файле в твоём примере я так и не нашёл. |
Автор: Rickert 24.11.2006, 13:09 |
Первый вопрос: у тебя включён стиль XP в настройках рабочего стола? |
Автор: neosapient 24.11.2006, 15:29 | ||||||||
Rickert,
Теперь четко вижу, ответ - да --------------------------------------------- BUGOR
Люди, приведите свой листинг *.rc-файла, в котором прикреплен манифест!!! ![]() Хочу сравнить правописание. |
Автор: BUGOR 24.11.2006, 16:09 | ||
|
Автор: neosapient 24.11.2006, 16:34 |
Что-то компилится, но мой глаз не видит отличий (сейчас все окошки в стиле ХР). Можно еще раз проверить, правильно ли собран проект? В чем визуальные преимущества? |
Автор: BUGOR 24.11.2006, 17:19 | ||||
Неправильно ![]()
Зачем ты ёё закомментировал? ![]() Добавлено @ 17:20 http://bobjohnson.nm.ru/inf/xp_style.html |
Автор: neosapient 24.11.2006, 18:46 | ||||
Эта я пытался (и пытаюсь) понять, почему диалоговое окно About не открывается. |
Автор: BUGOR 24.11.2006, 19:32 | ||||
У меня всё открывается с самого первого примера.
Ну вот и всё, стиль XP'шный. Ты что не видишь? |
Автор: neosapient 24.11.2006, 20:08 | ||
Значит стиль был все таки подключен? Стиль ХР вижу, только не пойму чем отличается прогамма с манифестом и без него (визуальных отличий нет)? И почему диалоговое окно About не открывается (в последнем примере)? |
Автор: BUGOR 25.11.2006, 07:13 | ||
Ты обкурился чтоли? ![]() Стиль стал икспишным начиная с StileTest4, когда раскомментировал нужную строку в rc. Окно About у меня открывается во всех твоих примерах, по нему как раз и видно стиль, т.к. там кнопочка такая красивая голубенькая стала, а в основном окне ты этот стиль не заметишь т.к. там нет никаких контролов на которые этот стиль распространяется. |
Автор: neosapient 25.11.2006, 13:58 | ||||||||
допустим это так.
понял, сейчас вставлю парочку, посмотрю что будет (буду искать десять отличий). ![]()
у меня открывается, но не вовсех примерах, конкретнее проблемы в StileTest2.rar (не компилиться) и в StileTest4.rar (диалог About не запускается).
Голубенькая - всмысле голубая коемка вдоль периметра? Ссделал снимки кнопок, в трех ситуациях (рисунки прикреплены в архиве): 1 - выбран классический стиль 2 - выбран стиль ХР, манифест не подключен 3 - выбран стиль ХР, манифест подключен Ну вижу я небольшие различия, и если из-за них столько шумихи, то мне это не совсем понятно, зачем?.. -------------------- Видел я некую програмку, называется что ли "ХРстиль". Так с ее помошью все кнопки перекрашиваются по всей винде. Я так думал, что та прога создавала невыгружаемые классы контролов, в которых происходила перерисовка обычных контролов в другие формы и цветовые гаммы. Но сейчас подумал, что для задания "формы и гаммы" используется другой механизм? Или описаный мной механизм выведен на более высокий уровень, но какой? Если слегка упростить вопрос, то можно ли без использования такого приема как субклассинг, на основе манифестов задействовать механизм, который даст мне еще один вид кнопки, отличный от тех трех. |
Автор: BUGOR 25.11.2006, 18:11 | ||||
А чё? По-моему красиво ![]()
Нет, я так не думаю, по-крайней мере в своей практике таких способов я не встречал. |
Автор: neosapient 26.11.2006, 13:06 |
И еще вопросики, очень важные для меня: Есть функция bool IsThemeActive() - проверяет, включены ли темы. Я так понимаю есть флаг, который указывает включены ли темы для всей winXP. 1) Как управлять флагом (чтоб самому включать и отключать темы для всех контролов по всей винде)? 2) Есть ли подобный флаг для всех контролов одного типа? 3) Есть ли подобный флаг для всех контролов принадлежащих одному приложению? 4) Можно ли в одном окне откючить темы скажем для всех кнопок, для одной определенной кнопки своего или чужого приложения? ![]() |
Автор: BUGOR 26.11.2006, 20:17 | ||
Сама функция IsThemeActive получает значение флага подключаясь к именованому порту(ZwConnectPort) - ThemeApiConnectionRequest, далее ждёт и получает ответ из порта(ZwRequestWaitReplyPort), ну а далее из структуры PORT_MESSSAGE(она кстати недокументирована, поэтому ищи её в сети) получает возвращаемое значение. Как управлять не знаю, дизасмить ядро нет желания ![]() |
Автор: neosapient 26.11.2006, 20:21 |
Может стоит дезасемблировать uxtheme.dll |
Автор: neosapient 26.11.2006, 23:04 |
dumb, спасибо за функции. Но я попытался сделать примерчик, который должен включать/выключать темы при запуске. А в результате получил такой эффект 1) ДО: Темы выключены - стиль классический ПОСЛЕ: Запуск программы никаких эффектов не дает. 2) ДО: Темы включены - стиль ХР, манифесты работают ПОСЛЕ: Запуск программы не выключает стильХР, но отключает все манифесты у всех окошек. 3) ДО: Темы включены - стиль ХР, манифесты не работают ПОСЛЕ: Запуск программы не выключает стильХР, манифесты остаются отключенными у всех окошек. Собственно помогите запустить первый пункт. |
Автор: neosapient 28.11.2006, 08:23 |
Что никто не знает, как исправить ![]() |
Автор: neosapient 30.11.2006, 12:40 |
Раз профи в этой теме нет, закрываю |