Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Автор: Клинт Раткэс (Clint Rutkas): twitter, блог
Загрузки: https://peacelovecode.com/code/cowbell/cowbell.zip
ПО:
Visual Studio 2008 Standard или старше (пробная версия)
Windows Mobile 6.0 SDK
Windows Mobile 6.1 Emulator Images (необязательно)
Оборудование: Windows Mobile Pro (необязательно)
Необходимое время: 2 часа
Затраты: Нулевые
Как известно, самый сложный музыкальный инструмент — это колокольчик, который привязывают коровам, чтоб они не потерялись. Именно его неземные звуки я решил реализовать в своем телефоне HTC Touch Diamond.
Приложение получилось достаточно понятное и простое. Оно позволяет изменять громкость телефона, обеспечивает ввод с сенсорного экрана, а также может служить демонстрацией развертывания приложения Windows Mobile. Кроме того, производится масштабирование изображения в соответствии с пропорциями экрана, но для реализации этой функции использовался существующий код.
Вы увидите, что применение эмулятора может потребовать некоторых дополнительных действий, а код в этом случае напоминает типичное Windows-приложение.
Приведенного в публикации исходного кода недостаточно для работы программы, вам надо загрузить исходный текст по ссылке, указанной в начале поста.
Первые шаги![image image]()
Установив и запустив Visual Studio 2008, вам надо будет загрузить и инсталлировать Windows Mobile 6.0 SDK, если его у вас нет (ссылка приведена в начале публикации).Visual Studio 2008 поставляется с версией 5.0 Windows mobile SDK.
Справа вы видите изображение эмулятора с одной из стилизованных форм. Но вы можете не только запускать свою программу на эмуляторе, но и устанавливать ее прямо на свой смартфон. Прямое развертывание допускается в режиме Windows Mobile Professional, что же касается Windows Mobile Standard (без поддержки сенсорного экрана), в этом режиме требуется несколько дополнительных шагов. Описание этих шагов приведено в моем блоге. После того как телефон корректно настроен, вам потребуется лишь изменить целевое устройство для установки.
На снимке экрана я выделил установку на устройстве, а не на эмуляторе.
Создание устройства
Для создания нового решения выберите меню File –> New –> Project (Файл –> Создать –> Проект). Мы выбрали проект «Smart Device» (Смарт-устройство) на языке С#.
Пока все просто, не правда ли? Теперь выберем инфраструктуру (.NET Framework 3.5) и целевую платформу. Выберите «Windows Mobile 6 Professional SDK» и щелкните OK, чтоб приступить к работе.
Изменение громкости
Для изменения громкости при работе с Сompact Framework сейчас приходится обращаться к некоторым вызовам Windows API посредством PInvoke. Не пугайтесь — это не страшно. На сайте pinvoke.net есть все, что делает эти вызовы проще простого. Мы создадим класс Audio и поместим в него все функции, связанные со звуком. К ним относятся проигрывание аудио-файла и изменение громкости. Для начала реализуем возможность проигрывания звукового файла. Поскольку мы будем получать наши данные из ресурсов, мы воспользуемся объектом MemoryStream для преобразования последовательности байтов в поток. Нам понадобится пространство имен System.Media. Для работы с PInvoke мы добавим еще System.Runtime.InteropServices .
1: private readonly SoundPlayer sp;
2:
3: public Audio(byte[] AudioResource)
4: {
5: sp = new SoundPlayer(new MemoryStream(AudioResource));
6: sp.Load();
7: }
8:
9: public void Play()
10: {
11: sp.Play();
12: }
13:
14: public void PlayLoop()
15: {
16: sp.PlayLooping();
17: }
18:
19: public void Stop()
20: {
21: sp.Stop();
22: }
В нашем приложении обращение к аудио-файлу будет выглядеть так:
1: private readonly Audio audio = new Audio(Properties.Resources.CowBellAudio);
Теперь задействуем PInvoke для изменения громкости. Должен признаться, что я не разобрался, почему применяются именно такие значения для громкости — я просто взял эту информацию в Интернете. В идеале хотелось бы видеть что-нибудь вроде значений от 0 до 100, но приходится использовать то, что есть. Создадим методы get/set, чтобы скрыть вызовы PInvoke.
1: [DllImport("coredll.dll")]
2: private static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);
3:
4: [DllImport("coredll.dll")]
5: private static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
6:
7: public static uint Volume
8: {
9: get
10: {
11: uint _volume;
12: waveOutGetVolume(IntPtr.Zero, out _volume);
13: return _volume;
14: }
15:
16: set
17: {
18: waveOutSetVolume(IntPtr.Zero, value);
19: }
20: }
21:
22: public enum Volumes
23: {
24: OFF = 0,
25: LOW = 858993459,
26: NORMAL = 1717986918,
27: MEDIUM = -1717986919,
28: HIGH = -858993460,
29: VERY_HIGH = -1
30: }
Создаем колокольчик
Симпатичные картинки и приятные звуки
Раз уж нас приложение с колокольчиком — нужен настоящий колокольчик. Я нашел картинку в Интернете, а также значок с изображением колокольчика на странице Famfamfam Silk.
Мы внедрим эти изображения в приложение, чтобы облегчить его развертывание. Для этого нам потребуется ресурс на вкладке свойств проекта. Выберите меню Project->Properties ( Проект->Свойства) или щелкните правой кнопкой проект и выберите в контекстном меню Properties (Свойства).
Здесь нам потребуются разделы Images (Изображения) и Audio (Звук).
Выделив нужный раздел, щелкните кнопку Add Resource (Добавить ресурс) и выберите нужный файл. Ссылаться на эти ресурсы весьма просто, но выглядит это по-разному в зависимости от языка.
1: Properties.Resources.cowBellImage;
Проще некуда!
Элементы формы
Чтобы изображение колокольчика было максимальным, мы отключим некоторые элементы формы. Установим WindowState в Maximum, TopMost в True, MinimizeBox в False и FormBorder в None.
Перетащим на форму два поля рисунков и назовем их picCowbell и picClose. Фон обоих полей установим прозрачным. Чтобы привязать события Click к полям рисунков, дважды щелкнем на каждом из них. Для элемента picClose мы добавим метод Close() , чтобы закрывать приложение щелчком этого изображения.
Также добавим событие MouseDown для picCowbell. Здесь мы зададим громкость и включим воспроизведение. Объект Audio порождается при создании формы, следовательно, он уже загружен в память при отображении формы и создается лишь единожды.
1: private readonly Audio audio = new Audio(Properties.Resources.CowBellAudio);
2: private void picCowbell_MouseDown(object sender, MouseEventArgs e)
3: {
4: Audio.Volumes value;
5: switch ((int)Math.Round((e.Y / (Height * 1.0)) * 5))
6: {
7: //case 0: // по умолчанию;
8: //case 1:
9: default:
10: value = Audio.Volumes.LOW;
11: break;
12: case 2:
13: value = Audio.Volumes.NORMAL;
14: break;
15: case 3:
16: value = Audio.Volumes.MEDIUM;
17: break;
18: case 4:
19: value = Audio.Volumes.HIGH;
20: break;
21: case 5:
22: value = Audio.Volumes.VERY_HIGH;
23: break;
24: }
25:
26: // Чтобы не снижать производительность, изменяем громкость
27: // только если изменились значения
28: if( oldValue != value)
29: {
30: Audio.Volume = (uint) value;
31: oldValue = value;
32: }
33: audio.Play();
34: }
Создание CAB-файла для установки
Можно щелкнуть правой кнопкой решение в обозревателе или выбрать меню File->New->Project (Файл->Создать->Проект). Если вы выберите меню, вы увидите картинку немного отличающуюся от моей. Внизу будет выпадающее меню, в котором вы сможете выбрать пункт «Add to Solution» (Добавить в решение) вместо «Create new solution» (Создать новое решение).
Поскольку я остановился на установке из CAB-файла, я выбрал «Other Project Types» (Другие типы проектов), а затем «Setup and Deployment» (Проект установки и развертывания) и «Smart Device CAB Project» (CAB-проект для интеллектуального устройства).
Теперь щелкните правой кнопкой «Application Folder» (Папка приложения) и выберите «Add» (Создать). Выберите «Primary Output» (Основные выходные файлы) и щелкните OK.
Теперь в окне «File System» (Файловая система) щелкните правой кнопкой «File System on Target Machine» (Файловая система на конечном компьютере) и перейдите к «Add Special Folder» (Добавить специальную папку) и выберите «Start Menu Folder» (Папка меню «Пуск»).
Теперь вернемся к «Application Menu» (Меню приложения) и щелкнем правой кнопкой «Primary output from Cowbell» (Основные выходные файлы Cowbell). Выберите «Create Shortcut» (Создать ярлык) и перетащите этот ярлык в свою папку меню «Пуск». Советую его переименовать.
Теперь можете построить решение, перетащить CAB-файл на устройство и установить приложение.
Завершение
Загрузить весь исходный код приложения можно здесь: https://peacelovecode.com/code/cowbell/cowbell.zip
Об авторе
Клинт Раткэс работает в Майкрософт. Он автор таких интересных проектов, как Disco Dance Floor (дискотечный танцпол), автоматический бармен и самобалансирующийся скейтборд. В своем блоге https://BetterThanEveryone.com он рассказывает о той безумной идее, над которой работает в текущий момент.
Comments
- Anonymous
April 04, 2009
Неплохо бы указывать ссылку-первоисточник статьи на английском языке. В данном случае http://blogs.msdn.com/coding4fun/archive/2008/11/10/9059259.aspx