Карманное программирование-3
Продолжение, начало см. в МК, №52(431) и 12(432433). А теперь мы перейдем к более тонким материям в деле программирования для КПК. Сегодня мы разберемся со встроенными в .NET CF DialogBox’ами и напишем более удобный компонент, который можно использовать для открытия/сохранения файлов.
.NET Compact Framework предлагает разработчикам два встроенных DialogBox’а для открытия и закрытия файлов. По принципу своей работы они заметно отличаются от своих собратьев из настольного .NET Framework, но все так же просты и понятны для программиста.
Создадим новый SmartDevice-проект в Visual Basic .NET. Для тех, кто программирует на C#, напомню, что в .NET CF у VB.NET и C# в основном используются одни и те же пространства имен, так что написание этой учебной программы не вызовет серьезных затруднений. Добавляем в наш проект диалоги OpenFileDialog и SaveFileDialog, назовем их
OpenFileDialog1 и
SaveFileDialog1 соответственно. Поместим на форму и две кнопки, которые назовем
btnOpen и
btnSave.
В этих DialogBox’ах всего четыре свойства: FileName название файла по умолчанию; Filter фильтр по типу файлов; InitialDirectory папка, с которой начинается просмотр файлов; FilterIndex индекс фильтра, используемого по умолчанию.
Пишем в Form_Load:
Добавляем в btnOpen_Click и btnSave_Click:
На
рис. 1 показана работа OpenFileDialog на эмуляторе. Простые и понятные в программировании, эти DialogBox’ы, впрочем, сложно назвать удобными в применении для конечного пользователя.
Следует обратить внимание, что Windows CE содержит еще несколько системных DialogBox’ов, которые нативно не поддерживаются .NET CF, а вызываются через Windows API.
Сolor Picker DialogBox используется для выбора цвета,
Page Setup DialogBox для настроек печати и работы с принтером. Они вызываются, соответственно, API-функциями ChooseColor и PageSetupDlgW из библиотеки commdlg.dll. Документацию по работе с этими API можно найти в Интернете.
Рассмотрим более подробно дисковую систему, которая используется в Windows CE. В силу своей портативности большинство карманных компьютеров используют в качестве основного накопителя не винчестер, а флэш-память. Windows Mobile поддерживает устанавливаемые файловые системы. Вообще, всю память КПК можно разделить на ROM, RAM и Flash.
В ROM хранится «прошивка» мобильного устройства, к ней нет прямого доступа на запись и она энергонезависима.
RAM разделяется на «программную память» и «объектную память». Первая используется как оперативная память. Вторая содержит файловую систему, реестр Windows и базы данных свойств ОС, в нее можно устанавливать программы и хранить данные(!). Объектная память энергозависима во всех версиях Windows Mobile кроме 2005. В случае полной разрядки аккумуляторов мобильного устройства после перезарядки система стартует в режиме cold boot, все настройки, свойства, ярлыки и т.д. будут безвозвратно утеряны. В Windows Mobile 2005 используется технология
Persistent Storage (Постоянное хранилище). В WM 2005 вся объектная память хранится в Flash ROM, а RAM (энергозависимая) используется только для промежуточных вычислений и временного хранения данных (как в ОЗУ настольных ПК).
Flash-карты используются для хранения пользовательских программ и информации. В современных КПК обычно поддерживаются форматы карт Secure Digital (SD) или Compact Flash (CF).
Напишем собственный аналог Open/Save-диалога. Для этого нам понадобится TreeView (назовем его
TreeView1), ImageList (
ImageList1) и простая кнопка (btnSelect). Напомню, что многие пространства имен и классы перешли из настольного .NET Framework почти без изменений. В этом примере мы сможем просто выбирать нужную папку из дерева папок, но эту программу можно легко усовершенствовать, а при желании и превратить в настоящий файловый менеджер.
Система работы с папками в Windows Mobile отличается от аналога в настольной Windows. В «мобильной» Windows корневая директория начинается с \, и все подкаталоги тоже разделяются \. Например, \\My Documents означает, что корневая директория содержит папку My Documents. Свойство FullPath, которое мы будем использовать в этом примере, возвращает полный путь к папке, начиная с \. Но для построения веток в TreeView такой вид будет неприемлем, поэтому лишний слеш будем отсекать.
В ImageList добавим коллекцию изображений, первое (индекс 0) из которых будет обозначать закрытую папку, второе (индекс 1) открытую папку. Я использовал в качестве изображений стандартные пиктограммы, которые можно найти в папке Visual Studio: \Common7\Graphics\bitmaps.
Объявим константы:
Код при запуске формы:
Событие BeforeExpand в TreeView до разворачивания вершины:
ShowChildNodes для отображения вложеных папок:
Функция SlashС для отсечения лишних слешей:
Обработка нажатия на кнопку btnSelect:
Вот и все! Запускаем! Если все сделано правильно, то скорее всего, вы увидите что-то похожее на
рис. 2.
Обратим внимание на класс
Cursor. В .NET Compact Framework
Cursor следует понимать не как указатель мыши, а как индикатор. Это анимированное изображение, которое появляется по центру экрана, когда идет загрузка приложения или когда КПК чем-то занят. Cursor.Current может принимать только два значения. Cursors.Default ничего не отображается, Cursors.WaitCursor отображается только что упомянутая пиктограмма. Предыдущий пример наглядно иллюстрирует работу с курсорами.
На сегодня все! Продолжение следует!
При написании статьи использовались материалы ресурса pocketpcmag.com.
|