Создание красивой кнопки в стиле XP, Vista, 7, 8

Обсуждения по программированию для ОС Windows безотносительно используемого языка программирования. Windows NT, Win32, Windows API, ядро и драйверы.
Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 21.04.2013 (Вс) 19:48

Для того чтобы в программе на VB6 в операционных системах XP, Vista, 7, 8 кнопка выглядела как родная, нужно добавить к программе манифест и ещё парочку вещей. А как создаётся такая кнопка на чистом WinAPI?
Википедия — это наилучший источник информации по теме «Википедия».

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Admiralisimys » 21.04.2013 (Вс) 22:47

Александр Дмитриев в этом случаи для любой Win32 программы нужен манифест - http://msdn.microsoft.com/en-us/library/cc302210.aspx

P.S.
Вот viewtopic.php?f=93&t=43429 пример программы на С++.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 22.04.2013 (Пн) 3:44

Давно хочу выложить статью по поводу манифестов и SxS, и в частности показать пример программы, в которой по соседству будут жить «красивые» и «некрасивые» кнопки.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 22.04.2013 (Пн) 5:30

Насколько я понял из объяснения Хакера, по умолчанию загружается старая версия библиотеки контролов для того, чтобы у старых приложений не возникало проблем совместимости с новой версией. Так уж велики эти проблемы? Какие они могут быть? Что, и в восьмёрке по умолчанию загружается старая версия в целях совместимости?
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 22.04.2013 (Пн) 5:32

На самом деле загружаться могут обе. Вопрос в том, какая используется при создании каждого конкретно взятого окна.
Можно одну кнопку создать используя другую библиотеку, а другую кнопку — используя другую.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 22.04.2013 (Пн) 5:57

Ну могут-то может быть и могут, но по умолчанию загружается только старая и используется только старая. Вопрос: зачем так сделали? Для совместимости со старыми приложениями?
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 22.04.2013 (Пн) 6:02

Александр Дмитриев писал(а):Ну могут-то может быть и могут, но по умолчанию загружается только старая и используется только старая. Вопрос: зачем так сделали? Для совместимости со старыми приложениями?

Вообще-то конечно да.

Только вот почему-то некоторые забывают, что SxS проектировался далеко не только под какие-то там жалкие коммонконтроллы.

Так что та логика, которую мы наблюдаем — это просто частный случай общей логики работы SxS (грузить «дикую, нестандартную, фиг-знает-пойми какую библиотеку» только если приложение само попросит использовать подобную версию).
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 22.04.2013 (Пн) 6:58

Так какие могут быть проблемы совместимости? Кто-нибудь такие наблюдал когда-нибудь? В восьмёрке какая версия загружается?

Хакер писал(а):Так что та логика, которую мы наблюдаем — это просто частный случай общей логики работы SxS (грузить «дикую, нестандартную, фиг-знает-пойми какую библиотеку» только если приложение само попросит использовать подобную версию).

Это не «дикая, нестандартная» библиотека, а родная для XP, Vista, 7, 8.

Кстати, а на версии 6.0 всё и закончилось? Она используется в родных приложениях восьмёрки?
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 22.04.2013 (Пн) 14:16

Александр Дмитриев писал(а):Это не «дикая, нестандартная» библиотека, а родная для XP, Vista, 7, 8.

Вот она и есть дикая и нестандартная с позиции SxS-подсистемы. Попробуй проникнуться этой идеей.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 24.04.2013 (Ср) 1:09

Какая же она нестандартная, когда используется в стандартных приложениях Windows?

Так всё-таки старая версия грузится потому, что новая нестандартная, или потому, что новая может быть несовместима со старыми приложениями?

А на другие вопросы, которые я задавал в этом топике, разве не знаешь ответа?

Если новая версия 6.0 была несовместима со старыми приложениями, написанными в предположении использования версии 5.0, то почему нельзя было сделать также версию 5.1, которую и загружать по умолчанию вместо 5.0 и которая не включала бы сильных нововведений версии 6.0, создающих несовместимость, а только обновляла внешний вид контролов из версии 5.0? Это позволило бы сделать все приложения одинаково выглядящими и не вызвало бы никаких проблем.
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 24.04.2013 (Ср) 5:08

Александр Дмитриев писал(а):Какая же она нестандартная, когда используется в стандартных приложениях Windows?

Вот мне не нравится, когда люди начинают судить о природе вещей с фактической точки зрения, а не с идеологической.

Вот с идеологической точки зрения — она должна считаться чужеродной.

Александр Дмитриев писал(а):Так всё-таки старая версия грузится потому, что новая нестандартная, или потому, что новая может быть несовместима со старыми приложениями?

Да SxS глубоко наплевать, есть ли там проблему совместимости. Ты должен проникнуться этой идеологией. Да, они там в MS могли для своей же собственной библиотеки написать особую обработку, но они сделали классом лучше, они заставили SxS отрабатывать этот случай просто как один из тысячи других случаев.

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

Александр Дмитриев писал(а):Если новая версия 6.0 была несовместима со старыми приложениями, написанными в предположении использования версии 5.0, то почему нельзя было сделать также версию 5.1, которую и загружать по умолчанию вместо 5.0 и которая не включала бы сильных нововведений версии 6.0, создающих несовместимость, а только обновляла внешний вид контролов из версии 5.0? Это позволило бы сделать все приложения одинаково выглядящими и не вызвало бы никаких проблем.


Основная несовместимость — это как раз таки графическая несовместимость, а не функциональная.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.04.2013 (Ср) 11:18

Хакер писал(а):У SxS простая логика: есть нормальные системные библиотеки, лежащие в system32, а есть фиг-знает-пойми-какие, которые лежат в карантине. Грузятся всегда нормальные из дефолтных путей, из карантина берутся только в том случае, если приложение само хочет.

А что такое карантин?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 24.04.2013 (Ср) 11:19

Qwertiy писал(а):А что такое карантин?

Имелся в виду SxS-репозиторий, естественно.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 24.04.2013 (Ср) 20:02

Хакер писал(а):Вот с идеологической точки зрения — она должна считаться чужеродной.

Почему? Просто слова о том, что она должна считаться чужеродной меня не убеждают в том, что она должна считаться чужеродной.

Хакер писал(а):У SxS простая логика: есть нормальные системные библиотеки, лежащие в system32, а есть фиг-знает-пойми-какие, которые лежат в карантине.

А почему версию 6.0 посчитали ненормальной и положили в карантин?

Хакер писал(а):Основная несовместимость — это как раз таки графическая несовместимость, а не функциональная.

Попробуй объяснить подробнее. Что ты подразумеваешь под графической несовместимостью? Старые программы, написанные в предположении использования версии 5.0, при использовании версии 6.0 будут выглядеть некрасиво (интерфейс будет построен неправильно)?
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 24.04.2013 (Ср) 20:07

Александр Дмитриев писал(а):Почему? Просто слова о том, что она должна считаться чужеродной меня не убеждают в том, что она должна считаться чужеродной.

Тогда я пасс. Я просто рассказываю логику принятия решений, которая когда-то имела место быть в кабинетах MS. Собрались проджект-менеджеры и решили: а давайте нашу систему по изоляции кривонестандартных по борьбе с DLL Hell используем для нашей же новой библиотеки, объявив её кривонестандартной. —That's great idea!

Александр Дмитриев писал(а):Что ты подразумеваешь под графической несовместимостью? Старые программы, написанные в предположении использования версии 5.0, при использовании версии 6.0 будут выглядеть некрасиво (интерфейс будет построен неправильно)?

Ну. Например старый код может предположить, что фон кнопок или заголовков колонок в листвью — однородно серый. И нарисует поверх что-то своё.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 24.04.2013 (Ср) 21:27

Александр Дмитриев писал(а):Что ты подразумеваешь под графической несовместимостью?

Да хоть такое. В XP дата и время помещаются в поле, а в Семёрке - нет.
Не помещается время.png
Не помещается время.png (626 байт) Просмотров: 12203

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 24.04.2013 (Ср) 22:58

Теперь вроде стало понятнее. А что происходило дальше, после выхода XP? Какие решения проджект-менеджеры принимали потом? Когда выходили сервис-паки для XP, когда выходили Vista, 7, 8? Выходили ли новые версии библиотеки стандартных контролов? Какая версия библиотеки загружается в новых операционных системах по умолчанию? Используют ли родные приложения этих операционных систем эту библиотеку и если да, то какую версию? Приложения, написанные на .NET-языках, как-то её используют?
Википедия — это наилучший источник информации по теме «Википедия».

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 25.04.2013 (Чт) 8:05

Александр Дмитриев писал(а):Приложения, написанные на .NET-языках, как-то её используют?

Это как раз с .NET'овского приложения скрин...

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Admiralisimys » 26.04.2013 (Пт) 0:34

Александр Дмитриев разве что устраняли баги и уязвимости, а так оставалась непоколебима 5.хх
В Восьмёрке всё так же.

Какая библиотека в WinForm .NET приложениях будет загружена зависит от того, вызван ли общий (статический) метод EnableVisualStyles класса Application.
WinForm_DotNet_App_And_Styles.png


Хакер будет интересно почитать такую статью.
Твоё объяснение, ссылку на которое приводит Александр Дмитриев в четвёртом посте, оно же, которое я читал ещё ранее, самое толковое которое довелось мне видеть на эту тему.

А вот самое первое http://www.xakep.ru/magazine/xs/040/076/1.asp - вообще было непонятно откуда что бралось, и что ети все вложения оказывается путь.

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 26.04.2013 (Пт) 19:32

Всё, теперь всё понятно.

Да, статью мне тоже было бы интересно прочитать.

А что это по ссылке на Xakep написано, что старая версия библиотеки бинарно несовместима с новой, что в версии 5.0 в comctl32.dll были реализованы только сложные контролы (деревья и т. д.), а простые (кнопка и т. д.) отрисовывались при помощи user32.dll, а начиная с 6.0 библиотека реализовывала все контролы, и что именно поэтому для работы с новой библиотекой требовалось указать её в манифесте? Почему тогда нельзя было в user32.dll поставить перенаправления на соответствующие функции comctl32.dll? Посчитали, что это слишком некрасиво, а вместо этого решили воспользоваться новой штукой (SxS)?
Википедия — это наилучший источник информации по теме «Википедия».

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16473
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Хакер » 26.04.2013 (Пт) 20:29

Александр Дмитриев писал(а):А что это по ссылке на Xakep написано

viewtopic.php?f=54&t=39188 пункт 2


Александр Дмитриев писал(а):Посчитали, что это слишком некрасиво, а вместо этого решили воспользоваться новой штукой (SxS)?

Потому что SxS создавалась для борьбы с Dll Hell, а рассматриваемый случай — как раз частный случай Dll Hell.

Александр Дмитриев писал(а):Почему тогда нельзя было в user32.dll поставить перенаправления на соответствующие функции comctl32.dll?

А переходники сделали. Как раз-таки, да.

Видишь ли, суть SxS в том, что в ряде ключевых мест в системных библиотеках сделаны переходники. Только не жесткие переходники, потому что это было бы тупо.

Ты так и не проникся идеей о том, что в каком-то приложении на одном и том же окне могут жить контролы как из 5-ой так и из 6-ой библиотеки?
Последний раз редактировалось Хакер 26.04.2013 (Пт) 21:35, всего редактировалось 1 раз.
Причина: Поправочка
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение iGrok » 26.04.2013 (Пт) 21:29

Хакер писал(а):viewtopic.php?f=54&t=39188 пункт 2

Он про ссылку на ксакеп.ру, так что всё верно. :)
label:
cli
jmp label

Александр Дмитриев
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 296
Зарегистрирован: 05.01.2005 (Ср) 3:39
Откуда: Санкт-Петербург    Куда: /dev/null

Re: Создание красивой кнопки в стиле XP, Vista, 7, 8

Сообщение Александр Дмитриев » 27.04.2013 (Сб) 1:17

Хакер писал(а):А переходники сделали. Как раз-таки, да.

Я так и подумал, потому что иначе бы VB6-программы не работали с новым оформлением, но и жёсткими они тоже не могут быть, иначе бы не отображалось старое оформление.

Хакер писал(а):Ты так и не проникся идеей о том, что в каком-то приложении на одном и том же окне могут жить контролы как из 5-ой так и из 6-ой библиотеки?

По моему, мне нужно не проникнуться идеей, а почитать MSDN или твою будущую статью. Я интуитивно понимаю, что переходники связаны с возможностью отображать несколькими библиотеками одновременно, но для полного понимания нужно читать.
Википедия — это наилучший источник информации по теме «Википедия».


Вернуться в Windows-программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6

    TopList