WinAmp обычно не предоставляет собственный графический интерфейс - он делегирует это «коже». Вы можете загрузить десятки примеров, и если память не сильно мне сильно вредит, документация также легко доступна.
С точки зрения вещей, я бы предположил, что iTunes использует какой-то слой перевода, чтобы позволить тому, что в основном написано как собственный Mac UI, запускаемый в Windows (то же самое, что Apple недавно решила, настолько зла, теперь запрещено на iPhone и, по-видимому, iPad).
Поскольку все, что может быть истолковано как негативное в отношении Apple, часто рассматривается как ересь, я укажу на все файлы .xib
, которые входят в состав iTunes для Windows. Файл .XIB (по крайней мере, обычно) создается Apple Builder для хранения ресурсов для программ OS/X и скомпилирован в файл .NIB до развертывания. Обычно Windows вообще не использует файлы .XIB или .NIB, и мне кажется, что Apple включает в себя уровень совместимости для использования в Windows (хотя я никогда не тратил время на то, чтобы выяснить, какой файл он хранит или что-то в этом роде).
Редактировать: (ответ на последний комментарий Маттиаса). Оказание это утомительно, но довольно просто. Вы в основном берете входные данные с кожи (например) и создаете элемент управления рисованием владельца (например, кнопку) и визуализируете кнопку на основе этого ввода.
Самый простой способ сделать это - иметь фиксированные позиции для ваших элементов управления и требовать от пользователя рисования/включения растровых изображений для фона и элементов управления. В этом случае вы просто загружаете фоновое растровое изображение и отображаете его, покрывая всю клиентскую область вашего приложения (и вы, вероятно, будете использовать окно без полей, так что это все, что показывает). Вы укажете все свои элементы управления как нарисованные владельцем, и для каждого вы загрузите их растровое изображение и выпустите его на экран для этого элемента управления. Поскольку не будет (обычно) видимой строки заголовка, вам часто придется обрабатывать WM_NCHITTEST
(или эквивалент в других системах), чтобы пользователь мог перетащить окно вокруг.
Если вы хотите немного усложниться, вы можете добавить такие вещи, как позволить им также указать размер и положение для каждого элемента управления, а также, возможно, указать, что некоторые элементы управления не будут отображаться вообще.Опять же, это не очень сложно справиться - в Windows, например, большинство элементов управления являются окнами, и вы можете указать размер и положение при создании окна. Если пользователь загружает другую оболочку во время выполнения, вы можете позвонить MoveWindow
, чтобы переместить/изменить размер каждого элемента управления по мере необходимости.
Самый простой и низкоуровневый способ - поймать сообщения WM_PAINT, которые дают вам «контекст устройства» (в основном, холст) и вручную рисуют все, что вы хотите. Конечно, есть, вероятно, более продвинутый и абстрактный способ сделать это. –
Это довольно просто: нанять 100 программистов. Скажите им, чтобы они не использовали стандартные средства управления Windows и библиотеки классов и не записывали свои собственные. После 292 000 человеко-часов у вас есть что-то, что не выглядит стандартным. –