Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 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 - тоже смотрел. 
Мне б простой рабочий примерчик  smile 

Автор: BUGOR 22.11.2006, 13:03
Цитата

1) Прикрепленный снизу проект, он имеет манифест и был правильно скомпилирован. Так ли это - да или нет (я лично сомневаюсь, иначе не задавал вопросы)? В чем ошибки (например не виден текст "HELLO WORLD", да и диалог About не загружается.


твой манифест к программе не прилинковался, значит неправильноsmile 


В остальном разбираться лениво, дам пару советов:
1. В самом начале программы вызывай такую функцию(её вызова я у тебя не нашёл):
InitCommonControls();
Её вызов "заставит" подгружать dll'ку comctl32.dll, в которой собственно и "храняться" все xp'шные контролы.

2. В файле RC пропиши следующую строку:
1 24 DISCARDABLE "name_of_theme.xml"

Всё, должно работать. smile


Автор: neosapient 22.11.2006, 19:44
Цитата

2. В файле RC пропиши следующую строку:
1 24 DISCARDABLE "name_of_theme.xml"

*.xml - всмысле файл манифеста *.manifest ?

В ресурсах правильно не прекрипить, помогите!!!

Автор: BUGOR 24.11.2006, 12:52
Цитата

*.xml - всмысле файл манифеста *.manifest ?

В ресурсах правильно не прекрипить, помогите!!!


Да, манифест файл имеет структуру xml. Что значит правильно не прикрепить? Именно в ресурсы и надо манифест класть.
Кстати, нужно строки в rc файле в твоём примере я так и не нашёл.

Автор: Rickert 24.11.2006, 13:09
Первый вопрос: у тебя включён стиль XP в настройках рабочего стола?

Автор: neosapient 24.11.2006, 15:29
Rickert, 
Цитата

Первый вопрос: у тебя включён стиль XP в настройках рабочего стола? 

Цитата

2) По прошлым изучениям выяснил, что манифест включается только когда стоит стиль ХР, если стоит класический стиль, то ничего визуально не измениться. Так ли это - да (только при стиле ХР) или нет (при любом стиле), свой ответ.

Теперь четко вижу, ответ - да
---------------------------------------------
BUGOR 
Цитата

Цитата

В ресурсах правильно не прекрипить, помогите!!!

Что значит правильно не прикрепить? 
---------
Именно в ресурсы и надо манифест класть.
нужно строки в rc файле в твоём примере я так и не нашёл. 

Люди, приведите свой листинг *.rc-файла, в котором прикреплен манифест!!!  smile 
Хочу сравнить правописание.

Автор: BUGOR 24.11.2006, 16:09
Код

#include "C:/masm32/include/resource.h"
1 24 DISCARDABLE "theme.xml"
100 DIALOGEX 130,108,206,64
CAPTION "php2exe by BUG(O)R [hunger.ru]"
FONT 8,"MS Sans Serif"
STYLE 0x10CA0802
EXSTYLE 0x00000000
BEGIN
  CONTROL "Path to script:",101,"Button",0x50000007,2,1,202,17,0x00000000
  CONTROL "",102,"Edit",0x50010000,6,11,176,11,0x00020000
  CONTROL "...",103,"Button",0x50010000,184,11,16,13,0x00000000
END
200 ICON DISCARDABLE "favicon.ico"


Автор: neosapient 24.11.2006, 16:34
Что-то компилится, но мой глаз не видит отличий (сейчас все окошки в стиле ХР).
Можно еще раз проверить, правильно ли собран проект?
В чем визуальные преимущества?

Автор: BUGOR 24.11.2006, 17:19
Цитата

Можно еще раз проверить, правильно ли собран проект?


Неправильно smile xml не прилинковался, открой блокнотом свой rc и посмотри на строку:

Код

//1 24 DISCARDABLE "theme.xml"


Зачем ты ёё закомментировал?smile

Добавлено @ 17:20 
http://bobjohnson.nm.ru/inf/xp_style.html

Автор: neosapient 24.11.2006, 18:46
Цитата

Неправильно  xml не прилинковался, открой блокнотом свой rc и посмотри на строку:
Цитата

//1 24 DISCARDABLE "theme.xml" 

Зачем ты ёё закомментировал?

Эта я пытался (и пытаюсь) понять, почему диалоговое окно About не открывается.

Автор: BUGOR 24.11.2006, 19:32
Код

Эта я пытался (и пытаюсь) понять, почему диалоговое окно About не открывается.


У меня всё открывается с самого первого примера.

Код

Присоединённый файл ( Кол-во скачиваний: 1 ) 
  StileTest4.rar 53,47 Kb


Ну вот и всё, стиль XP'шный. Ты что не видишь?

Автор: neosapient 24.11.2006, 20:08
Цитата

Ну вот и всё, стиль XP'шный. Ты что не видишь? 

Значит стиль был все таки подключен?
Стиль ХР вижу, только не пойму чем отличается прогамма с манифестом и без него (визуальных отличий нет)?
И почему диалоговое окно About не открывается (в последнем примере)?

Автор: BUGOR 25.11.2006, 07:13
Цитата

Значит стиль был все таки подключен?
Стиль ХР вижу, только не пойму чем отличается прогамма с манифестом и без него (визуальных отличий нет)?
И почему диалоговое окно About не открывается (в последнем примере)?


Ты обкурился чтоли?smile 
Стиль стал икспишным начиная с  StileTest4, когда раскомментировал нужную строку в rc. Окно About у меня открывается во всех твоих примерах, по нему как раз и видно стиль, т.к. там кнопочка такая красивая голубенькая стала, а в основном окне ты этот стиль не заметишь т.к. там нет никаких контролов на которые этот стиль распространяется.

Автор: neosapient 25.11.2006, 13:58
Цитата

Стиль стал икспишным начиная с  StileTest4, когда раскомментировал нужную строку в rc.

допустим это так.

Цитата

 в основном окне ты этот стиль не заметишь т.к. там нет никаких контролов на которые этот стиль распространяется

понял, сейчас вставлю парочку, посмотрю что будет (буду искать десять отличий).  smile 

Цитата

Окно About у меня открывается во всех твоих примерах,

у меня открывается, но не вовсех примерах, конкретнее проблемы в StileTest2.rar (не компилиться) и в StileTest4.rar (диалог About не запускается).

Цитата

кнопочка такая красивая голубенькая стала

Голубенькая - всмысле голубая коемка вдоль периметра?
Ссделал снимки кнопок, в трех ситуациях (рисунки прикреплены в архиве):
1 - выбран классический стиль
2 - выбран стиль ХР, манифест не подключен
3 - выбран стиль ХР, манифест подключен
Ну вижу я небольшие различия, и если из-за них столько шумихи, то мне это не совсем понятно, зачем?.. 

--------------------
Видел я некую програмку, называется что ли "ХРстиль". Так с ее помошью все кнопки перекрашиваются по всей винде. Я так думал, что та прога создавала невыгружаемые классы контролов, в которых происходила перерисовка обычных контролов в другие формы и цветовые гаммы.
Но сейчас подумал, что для задания "формы и гаммы" используется другой механизм? Или описаный мной механизм выведен на более высокий уровень, но какой?

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

Автор: BUGOR 25.11.2006, 18:11
Цитата

Ну вижу я небольшие различия, и если из-за них столько шумихи, то мне это не совсем понятно, зачем?.. 


А чё? По-моему красивоsmile

Цитата

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


Нет, я так не думаю, по-крайней мере в своей практике таких способов я не встречал.

Автор: neosapient 26.11.2006, 13:06
И еще вопросики, очень важные для меня:
Есть функция bool IsThemeActive() - проверяет, включены ли темы. Я так понимаю есть флаг, который указывает включены ли темы для всей winXP.
1) Как управлять флагом (чтоб самому включать и отключать темы для всех контролов по всей винде)?

2) Есть ли подобный флаг для всех контролов одного типа?

3) Есть ли подобный флаг для всех контролов принадлежащих одному приложению?

4) Можно ли в одном окне откючить темы скажем для всех кнопок, для одной определенной кнопки своего или чужого приложения?
 
 smile 

Автор: BUGOR 26.11.2006, 20:17
Цитата

1) Как управлять флагом (чтоб самому включать и отключать темы для всех контролов по всей винде)?


Сама функция IsThemeActive получает значение флага подключаясь к именованому порту(ZwConnectPort) - ThemeApiConnectionRequest, далее ждёт и получает ответ из порта(ZwRequestWaitReplyPort), ну а далее из структуры PORT_MESSSAGE(она кстати недокументирована, поэтому ищи её в сети) получает возвращаемое значение.
Как управлять не знаю, дизасмить ядро нет желанияsmile





Автор: neosapient 26.11.2006, 20:21
Может стоит дезасемблировать uxtheme.dll

Автор: dumb 26.11.2006, 21:46
Цитата(neosapient @  26.11.2006,  20:21 Найти цитируемый пост)
Может стоит дезасемблировать uxtheme.dll 

смысл? - может просто msdn почитать?

Цитата(neosapient @  26.11.2006,  13:06 Найти цитируемый пост)
Как управлять флагом (чтоб самому включать и отключать темы для всех контролов по всей винде)?

http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/userex/functions/enabletheming.asp?frame=true

все остальные вопросы решаются перечислением всех окон(приложения) и функцией http://msdn.microsoft.com/library/en-us/shellcc/platform/commctls/userex/functions/setwindowtheme.asp?frame=true

Автор: neosapient 26.11.2006, 23:04
dumb, спасибо за функции.
Но я попытался сделать примерчик, который должен включать/выключать темы при запуске.

А в результате получил такой эффект 
1) ДО: Темы выключены - стиль классический
ПОСЛЕ: Запуск программы никаких эффектов не дает.

2) ДО: Темы включены - стиль ХР, манифесты работают
ПОСЛЕ: Запуск программы не выключает стильХР, но отключает все манифесты у всех окошек.

3) ДО: Темы включены - стиль ХР, манифесты не работают
ПОСЛЕ: Запуск программы не выключает стильХР, манифесты остаются отключенными  у всех окошек.

Собственно помогите запустить первый пункт.

Автор: neosapient 28.11.2006, 08:23
Что никто не знает, как исправить smile 

Автор: neosapient 30.11.2006, 12:40
Раз профи в этой теме нет, закрываю

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)