Программирование КПК и смартфонов на .NET Compact Framework
Введение
Сейчас очень трудно найти книги, в которых описываются проблемы программирования для карманных компьютеров и смартфонов при помощи технологии .NET Compact Framework. Одним из главных источников получения информации является сама документация, входящая в состав Visual Studio 2005. Но одной документации явно недостаточно. Именно поэтому и появилась на свет книга, которую вы держите в руках.
Ни в коем случае не стоит рассматривать данное произведение как полный и исчерпывающий учебник, в котором можно найти ответы на все вопросы. В книге объясняются базовые принципы программирования для компактных устройств. И автор надеется, что книга послужит стимулом для дальнейшей работы в этой области.
На кого рассчитана эта книга
Книга рассчитана в первую очередь на программистов, уже имеющих опыт программирования на .NET Framework, которые хотят расширить свой кругозор за счет освоения .NET Compact Framework. После освоения новой технологии у разработчика появится возможность перенести некоторые программы с обычных компьютеров на другую платформу, тем самым увеличивая число своих потенциальных клиентов.
Требования
Чтобы работать с примерами из этой книги, необходимо иметь на компьютере пакет программ Visual Studio 2005. Обратите внимание на то, что некоторые облегченные версии Visual Studio 2005 (в частности, Express-версии) не поддерживают разработки программ для мобильных компьютеров. Часть примеров можно использовать и в старой версии Visual Studio 2003, однако в этом случае разработчику придется вручную переписывать код из-за несовместимости форматов разных версий Visual Studio. Впрочем, настоящего программиста этим не испугаешь!
Примеры к книге
Практически любая книга по программированию снабжается сопутствующими примерами. Не стала исключением и книга, которую вы держите в руках. Каждая глава сопровождается массой примеров, а найти их код можно на сайте издательства «Питер».
В качестве основного языка программирования был выбран язык C#, но в третьей главе были также добавлены примеры программирования на языке Visual Basic.NET. Если среди читателей книги найдется много приверженцев этого языка, то на сайте автора будут выложены все необходимые примеры, написанные на Visual Basic.NET.
Благодарности
Любую работу в наше время тяжело делать в одиночку. Хорошо, когда находятся люди, готовые поддержать инициативу. Поэтому хотелось бы назвать тех, без которых эта книга могла не появиться на свет.
В первую очередь надо поблагодарить издательство «Питер» (www.piter.com), которое согласилось выпустить данную книгу.
Хочу также выразить благодарность тем людям, которые любезно разрешили использовать исходные коды своих чудесных программ в качестве учебных примеров. Это Кристиан Форсберг (Christian Forsberg), Алекс Яхнин (Alex Yakhnin) и Роб Майлз (Rob Miles). Без примеров этих авторов книга получилась бы скучной и неинтересной.
Так получилось, что во время написания книги мне пришлось поменять работу. В этом процессе участвовали несколько человек, которые способствовали переходу. Поэтому хочется поблагодарить и этих людей, благодаря которым у меня появились дополнительные возможности для работы над книгой. В первую очередь хотелось бы отметить генерального директора гостиничного комплекса «Вега» Воробьева Алексея Петровича, главного инженера Миклушова Владимира Павловича и начальницу АХО Егоркину Галину Владимировну. Хочу поблагодарить также всех сотрудников отдела информационных технологий, возглавляемого Рогулиным Виктором Васильевичем, которые делились своими знаниями на новой работе: Храмцову В., Пузикову Н. (особенно), Фетисову Е., Шумова Е., Князева Л., Алдохина А., Дробота В., Терехова А., Нечеухина Н.
Отзывы и предложения
Все свои отзывы и критические замечания вы можете посылать на электронный адрес автора rusproject@mail.ru. Также стоит почаще заглядывать на сайт http://rusproject.narod.ru, на котором я постараюсь размещать новые дополнительные материалы по тематике книги.
От издательства
Ваши замечания, предложения и вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Все исходные тексты, приведенные в книге, вы можете найти по адресу http://www.piter.com/download.
Подробную информацию о наших книгах вы найдете на веб-сайте издательства: http://www.piter.com.
Глава 1
Знакомство с .NET Compact Framework
Мобильные устройства
Мобильные устройства все активнее вторгаются в нашу жизнь. Все чаще можно встретить в метро молодых людей, увлеченно работающих с карманным компьютером. Я сам несколько раз был свидетелем того, что обладателями КПК были девушки. Это говорит о том, что данные устройства уже утратили статус дорогой игрушки технократов и рассматриваются как необходимое устройство, которое вскоре будет таким же доступным, как обычный сотовый телефон.
В последнее время на рынок активно выходят смартфоны под управлением операционной системы Windows Mobile 5.0. Пока в этом сегменте рынка прочные позиции удерживают смартфоны под управлением Symbian, производимые фирмами Nokia и Sony Ericsson. Но умение Microsoft завоевывать себе место под солнцем давно стало общеизвестным. Достаточно вспомнить противоборство браузеров Netscape и Internet Explorer, а также КПК Palm и PocketPC. Эта тенденция позволяет считать, что и «умные» телефоны под управлением Windows Mobile скоро потеснят своих конкурентов.
И в этой ситуации очень ярко проявляется преимущество изучения .NET Compact Framework. Если вы знакомы с программированием для .NET Framework, то вам не составит труда перейти к освоению особенностей программирования для КПК и мобильных телефонов под управлением Windows Mobile. Ведь писать программы придется в уже знакомой вам среде Visual Studio .NET. Более того, вам даже не обязательно иметь сам карманный компьютер или смартфон для проверки написанного кода, так как в Visual Studio .NET уже имеются эмуляторы для этих мобильных устройств.
С помощью этой книги читатель сможет научиться самостоятельно писать программы для мобильных устройств. Это позволит расширить круг своих знаний, а также улучшить сбыт программ, если вы занимаетесь программированием коммерческих приложений.
В данной книге все примеры написаны на новых языках семейства .NET, таких как C# и Visual Basic .NET.
Общие сведения
Главная страница, посвященная .NET Compact Framework, находится по адресу http://msdn.microsoft.com/netframework/programming/netcf/default.aspx. Там можно найти все последние новости о рассматриваемой технологии, обновления программ, ссылки на другие полезные сайты, примеры.
Технология .NET Compact Framework поддерживается операционными системами Pocket PC 2000, Pocket PC 2002, Windows Mobile 2003, Windows Mobile 2005 и Windows CE .NET 4.1.
Конечно, технология .NET Compact Framework несколько отличается от .NET Framework. Подробную информацию о различиях между этими технологиями можно найти на странице по адресу msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_evtuv/html/etconComparisonsWithNETFramework.asp. Считается, что .NET Compact Framework является частью полной библиотеки .NET Framework. Действительно, между двумя этими платформами очень много общего. Но все же говорить о .NET Compact Framework как о подмножестве полной .NET Framework не совсем корректно. Дело в том, что .NET Compact Framework поддерживает серию классов, которых нет в полной библиотеке классов. Эти классы созданы специально для мобильных устройств и позволяют поддерживать, например, программную клавиатуру, возможности инфракрасной связи и отправки SMS.
Библиотека .NET Compact Framework действительно компактна. Вместо 20 Мбайт полного пакета .NET Framework, устанавливаемого на настольные компьютеры, она занимает около 2 Мбайт. Полная версия .NET Framework содержит 18 700 классов и 80 000 методов, a NET Compact Framework — всего лишь 4 700 классов и 13 000 методов. Но следует помнить, что это лишь приблизительная оценка.
Развитие .NET Compact Framework
Поначалу .NET Compact Framework устанавливалась в карманные компьютеры Pocket PC отдельно. Это порождало определенные проблемы для разработчиков. Не каждый пользователь хотел устанавливать пакет .NET Compact Framework, необходимый для работы программы, когда оперативной памяти и так не хватает. Впервые библиотека .NET Compact Framework стала встраиваться в портативные устройства под управлением Windows Mobile 2003 (Pocket PC 2003). На борту компьютеров под управлением Windows Mobile Second Edition уже находился пакет .NET Compact Framework 1.0 SP2). По уверениям Microsoft, работа с ресурсами стала быстрее на 600%, работа с XML с помощью класса XMLTextReader стала быстрее на 40%, а работа с ADO.NET — на 20%. Естественно, с выходом библиотеки .NET Compact Framework 2.0 создатели снова стали говорить о повышении быстродействия и надежности. Но следует учитывать, что устройства с предустановленной библиотекой .NET Compact Framework 2.0 еще не выпускаются, и пользователь должен сам установить необходимый пакет. Возможно, когда книга выйдет из печати, в мире уже появятся устройства встроенной версией .NET Compact Framework 2.0.
Что нового в .NET Compact Framework 2.0
Список основных изменений в .NET Compact Framework 2.0 приведен на странице msdn.microsoft.com/netframework/programming/netcf/default.aspx?pull=/library/en-us/dnnetcomp/html/whats_new_netcf2.asp. К основным улучшениям библиотеки .NET Compact Framework 2.0 относятся усовершенствованные возможности создания пользовательского интерфейса, новая мобильная база данных, существенные усовершенствования эмулятора, усиленная поддержка COM Interop и Managed Interfaces для D3D. Библиотека .NET Compact Framework 2.0 расширила существующую функциональность в .NET CF 1.0 новыми возможностями. Также разработчики добавили поддержку новых классов, которые ранее были доступны только в полной .NET Framework. В этой книге обязательно будут рассмотрены наиболее значительные новинки. А сейчас можно лишь упомянуть основные моменты.
Пакет .NET Compact Framework 2.0 в Visual Studio 2005 стал поддерживать новые элементы управления, позволяющие создавать очень сложные приложения без написания громоздкого кода. В частности, появилась поддержка элементов управления MonthCalendar и DateTimePicker, позволяющих создавать интерфейс календаря. Также появился новый элемент для уведомлений Notification. Кроме него разработчики получили доступ к элементам DocumentList и HardwareButton. Более подробно они будут рассматриваться в главе, посвященной элементам управления. Новое свойство ScreenOrientation позволяет без использования неуправляемого кода вращать экран устройства. Кроме того, стало значительно проще создавать собственные элементы управления, как это делается в полной версии .NET Framework.
Элементы пользовательского интерфейса в .NET Compact Framework 2.0 теперь поддерживают присоединение (docking). При перемещении элемента управления к определенной стороне контейнера он всегда заполняет эту сторону контейнера.
Некоторые элементы управления стали поддерживать свойство AutoScaleMode. Свойство AutoScaleMode показывает, как нужно перерисовывать элемент при изменении разрешения экрана. Также формы стали поддерживать свойство AutoScroll.
Помимо этого класс Control теперь поддерживает методы SuspendLayout и ResumeLayout. Также в .NET Compact Framework появилась полноценная поддержка буфера обмена.
Класс Graphics тоже получил новые возможности, и теперь при помощи свойств DpiX и DpiY разработчик может узнать размеры экрана. Помимо этого сейчас можно отображать текст под различными углами при помощи класса LogFont. Также разработчик может создавать перья заданных цвета и размера.
Значительно улучшена работа с растровыми изображениями. Программисты получили новые возможности для создания изображений и сохранения их в файле или потоке. В приложениях стало проще манипулировать изображениями при помощи комбинации методов LockBits и UnlockBits в сочетании с новым классом BitmapData. Приложения, использующие при работе с изображениями неуправляемый код, теперь могут получать дескриптор объекта Bitmap через метод GetHbitmap.
Новые возможности позволяют разрабатывать приложения с использованием управляемого кода для Windows Mobile 5.0 при помощи классов из пространства имен Microsoft.Windows.DirectX. Поддержка DirectX позволяет писать игры с использованием управляемого кода, обеспечивая более быструю разработку приложений, чем при использовании неуправляемого DirectX.
Так как на рынке все чаще стали появляться устройства со встроенной клавиатурой, то в библиотеку .NET Compact Framework 2.0 была введена поддержка клавиатуры.
Также следует отметить, что элементы управления теперь распознают события KeyUp, KeyDown и KeyPress. Объект Form теперь имеет свойство KeyPreview.
Тестировать программы тоже стало намного проще, так как эмулятор в .NET Compact Framework 2.0 подвергся значительной переработке. Перечень функциональных возможностей эмуляторов Pocket PC и смартфонов был расширен, что облегчает создание, проверку и развертывание приложений. Особое внимание было уделено поддержке сетевого взаимодействия. Кроме того, было улучшено быстродействие эмулятора. Появилась поддержка программы ActiveSync, можно работать с общими папками и использовать четыре COM-порта. Также эмулятор стал поддерживать работу с портретным и альбомным режимами отображения. Кроме того, эмулятор теперь эмулирует работу ARM-процессора.
Технология Smart Device CAB Project упростила развертывание мобильных приложений. Эта технология позволяет использовать в визуальном редакторе перемещение файлов, создавать папки и записи в реестре. Теперь создавать CAB-проект для установочного пакета так же просто, как при создании проекта Windows Installer для настольных компьютеров.
Новый компилятор теперь создает еще лучший и более быстрый код. Если в предыдущей версии использовались два JIT-компилятора, то теперь .NET CF 2.0 применяет единый компилятор для всех поддерживаемых процессоров.
В области безопасности добавлена поддержка идентификации NTLM и Kerberos. Также улучшена работа с технологией XML, и в распоряжение программистов поступил новый класс XmlSerialization.
Намного удобнее стало разрабатывать дизайн форм в среде разработки Visual Studio .NET 2005. Процесс создания программы стал еще более наглядным. Программист может создавать собственные элементы управления так же, как и для обычных приложений.
Что нового в Visual Studio .NET 2005
Если у вас уже был опыт программирования под Visual Studio .NET 2003, то вы заметите, что на панели инструментов появились новые элементы управления. Они будут рассматриваться в главе, посвященной элементам управления. При разработке дизайна приложения будет заметно, как Windows Forms Designer помогает выравнивать элементы и предлагает выбрать минимальное расстояние между элементами. Автоматически проявляющиеся линии выравнивания помогают создавать аккуратные интерфейсы за очень короткий срок. Также появилась возможность разработки приложений, которые могут переключаться между портретным и альбомным режимами экрана.
Глава 2
Первое приложение для .NET Compact Framework
Первые шаги
Практика — это самый лучший способ научиться программировать для мобильных устройств под .NET Compact Framework. Чтобы поверить в свои силы, нужно создать простейшее приложение. На его примере можно будет изучить различия между .NET Compact Framework и обычной .NET Framework.
Прежде всего нужно запустить среду разработки Microsoft Visual Studio 2005 и создать новый проект. Первые различия в процессе разработки можно увидеть уже на этой стадии. Если для создания обычных приложений надо было выбрать раздел Windows, то на этот раз необходимо выбрать раздел Smart Device. В этом разделе содержатся подразделы, которые отвечают за создание приложений для КПК, смартфонов и устройств под управлением операционной системы Windows СЕ. Итак, нужно указать язык программирования Visual С#, перейти в раздел Smart Device и выбрать подраздел Pocket PC 2003 (рис. 2.1).
Рис. 2.1. Выбор типа платформы
Список подразделов на рисунке может отличаться от списка подразделов на вашем компьютере. Например, пункты Windows Mobile 5.0 Pocket PC и Windows Mobile 5.0 Smartphone появились после установки соответствующих пакетов SDK.
В выбранном подразделе присутствуют несколько шаблонов для реализации различных задач. Как правило, используется шаблон Device Application. Нужно отметить, что существует еще один похожий шаблон с названием Device Application (1.0). Эти два шаблона различаются применяемой версией .NET Compact Framework. По умолчанию в Visual Studio 2005 используется .NET Compact Framework версии 2.0. Если выделить первый шаблон, то в строке состояния можно увидеть сообщение A project for creating a .NET Compact Framework 2.0 forms application for Pocket PC 2003 and later. В примерах будет использоваться, как правило, версия 2.0, так как она имеет ряд преимуществ.
После того как будет выбран шаблон для приложения, требуется изменить имя проекта. По умолчанию используется название DeviceApplication1, но наше первое приложение получит имя FirstPocketPCApp_CS. После нажатия кнопки OK откроется окно среды разработки с необычным видом формы. Если при программировании программ для настольных компьютеров отображается только форма, то в данном случае на экране будут показаны не только форма, но и внешний вид целевого устройства. При желании разработчик может даже изменить внешний вид карманного компьютера, создав специальные файлы. Если вы предпочитаете работать с классическим видом формы, то можно отключить отображение устройства, оставив на экране только форму. Для этого нужно щелкнуть правой кнопкой мыши на форме и в появившемся контекстном меню выбрать пункт Show Skin. Повторный выбор этого пункта вернет на экран стандартный вид формы.
Обычно в качестве первого примера создается стандартная программа, которая выводит приветствие на экран. На форме надо расположить кнопку Button и элемент Label для отображения надписи. Также потребуется написать код для обработчика события Click созданной кнопки. Этот код приведен в листинге 2.1.
private void butSayHello_Click(object sender, EventArgs e) {
lblHello.Text = "Здравствуй, мир!";
}
Теперь можно запустить проект при помощи команды Start Debugging или клавиши быстрого вызова F5. При этом на экране появится диалоговое окно Deploy (рис. 2.2).
Рис. 2.2. Диалоговое окно Deploy
В основном списке окна перечислены устройства, на которых может выполняться написанная программа. Проверять работу приложения можно как на реальном устройстве, так и при помощи эмулятора. Как правило, при отладке программы используют эмуляторы и только в финальной части тестируют программу на реальном устройстве. Легко заметить, что создание программ для КПК совсем не требует наличия карманного компьютера. Автор не раз был свидетелем того, как разработчик на своем сайте признавался, что написал приложение, не имея КПК. А пользователи благодарили автора за хорошую программу и подтверждали ее работоспособность на своих реальных моделях.
Практически все примеры из этой книги сначала запускались на эмуляторе. Поэтому можно выбрать любой эмулятор из предложенного списка. Чаще всего применяется эмулятор Pocket PC 2003 SE. После выбора соответствующего значения в списке нужно нажать кнопку Deploy. Сначала на экране монитора будет отображен сам эмулятор (рис. 2.3), а спустя некоторое время в эмуляторе будет запущена созданная программа.
Рис. 2.3. Первый запуск эмулятора
Мышью можно щелкнуть на кнопке с надписью Поздороваться. В результате на форме появится строка Здравствуй, мир! (рис. 2.4).
Рис. 2.4. Отображение сообщения
Теперь, когда вы поверили в свои силы, вам захочется начать переписывать свои старые программы, написанные на С# или Visual Basic .NET, для карманных компьютеров. Но торопиться все же не стоит. Между полной версией .NET Framework и .NET Compact Framework существует довольно много различий, которые придется последовательно устранять.
Кнопки минимизации и закрытия формы
При создании пустой формы можно заметить, что отображается всего одна кнопка минимизации вместо привычных трех кнопок свертывания, восстановления и закрытия формы. Причем кнопка минимизации в виде крестика очень похожа на кнопку закрытия формы в обычных настольных приложениях. У начинающих программистов это поначалу вызывает недоумение. Стандартная модель поведения программ на карманном компьютере устроена таким образом, что когда пользователь нажимает кнопку с крестиком, то он сворачивает программу, а не закрывает ее. Об этом говорит значение True свойства формы MinimizeBox. Если для этого свойства задать значение False, то вместо кнопки с крестиком будет отображаться кнопка OK (рис. 2.5). При нажатии на эту кнопку программа завершит свою работу.
Рис. 2.5. Приложение с кнопкой OK
Размеры и позиция формы
По умолчанию любая форма занимает весь экран. Ее верхний левый угол находится в точке с координатами (0, 26). Если попробовать вручную изменить значения свойства Location, то среда разработки проигнорирует эти попытки и вернет значения. Что же касается размеров формы, то при желании все же можно изменить высоту и ширину формы. Но на практике подобная необходимость встречается редко, поэтому мы не будем заострять на этом внимание.
Меню
По умолчанию в создаваемой форме уже содержится элемент управления MainMenu. Однако в первом примере он не применялся. Чтобы использовать этот элемент управления, нужно создать простое меню с одним пунктом. В области Component tray нужно выделить мышью элемент mainMenu1. На форме появится надпись Type here. В этой области нужно ввести слово «Поздороваться». Для обработчика события menuItem1_Click будет применяться тот же код, который вызывался при нажатии на кнопку. Код обработчика события приведен в листинге 2.2.
private void menuItem1_Click(object sender, EventArgs e) {
lblHello.Text = "Здравствуй, мир!";
}
После запуска программы можно заметить, что созданный пункт меню располагается в нижней части экрана, в отличие от настольных приложений, в которых меню располагается в верхней части окна (рис. 2.6).
Рис. 2.6. Меню в нижней части окна
Следует отметить, что меню в приложениях для Pocket PC располагается не на форме, а на панели задач. Также на панели задач находится значок виртуальной клавиатуры SIP для ввода информации. Когда пользователь запускает приложение, то его меню появляется на панели задач. Но если удалить меню из формы, то при запуске программы панель задач вообще не будет отображаться (рис. 2.7).
Рис. 2.7. Экран без панели задач
Панель ввода SIP