2010-04-28 4 views
3

Я всегда задавался вопросом, как программное обеспечение, такое как iTunes, Winamp и т. Д., Может создать собственный пользовательский интерфейс.Пользовательская библиотека Windows GUI

Как это делается на платформе Windows? Есть ли какой-либо код в Интернете, объясняющий, как создать собственный пользовательский графический интерфейс?

+2

Самый простой и низкоуровневый способ - поймать сообщения WM_PAINT, которые дают вам «контекст устройства» (в основном, холст) и вручную рисуют все, что вы хотите. Конечно, есть, вероятно, более продвинутый и абстрактный способ сделать это. –

+2

Это довольно просто: нанять 100 программистов. Скажите им, чтобы они не использовали стандартные средства управления Windows и библиотеки классов и не записывали свои собственные. После 292 000 человеко-часов у вас есть что-то, что не выглядит стандартным. –

ответ

4

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, чтобы переместить/изменить размер каждого элемента управления по мере необходимости.

+2

Я не хочу превращать это в дебаты, но я думаю, что вы правильно относитесь к iTunes в Windows, эквивалентно Flash или другому кросс-платформенному коду на iPhone! Однако также обратите внимание на то, как бесшовная iTunes находится на Mac, но так ужасно неудобно и неуместно, что она находится в Windows. Подумайте, это демонстрация! – mbmcavoy

+0

Что вы подразумеваете под словом «он делегирует это« коже »? мой вопрос не был специфичен для Winamp и iTunes, а также о том, как некоторые приложения могут отображать персонализированный пользовательский интерфейс. было бы интересно узнать, как они делают это через «кожу». –

+0

@Luca: Документация по разработке кожи WinAmp находится по адресу: http://dev.winamp.com/skin-developers –

1

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

Для Windows доступно множество графических интерфейсов.

Некоторые

Если вы хотите более полный список, посмотрите статью Википедии для MFC (http://msdn.microsoft.com/en-us/library/d06h2x6e%28VS.90%29.aspx) и прокрутите вниз.

Каждый из этих графических интерфейсов полностью документирован в Интернете.

+1

нет, я имею в виду GUI framework –

+0

Проверьте эти ссылки, они представляют собой графические интерфейсы, поэтому вы можете подобрать некоторые идеи о том, как они справляются с этим и оттуда. Примеры - отличный инструмент обучения. ;) – ssube

Смежные вопросы