- Visual basic приложения для windows ce
- Особенности
- Пример VBCE приложения
- Распространение вашего VBCE приложения
- Visual basic приложения для windows ce
- Приложение «Здравствуй, мир!»
- Заключительная часть разработки приложения
- Что внутри?
- Compact’ный .NET Framework
- Библиотека поддержки Visual Basic
- Windows Forms
- Форма и элементы управления
- Разработка SDE-приложений
- Использование ListView
- Вызов API-функций
- Windows CE API
Visual basic приложения для windows ce
Чтобы разрабатывать приложения для Microsoft Windows CE, Вам достаточно иметь Microsoft Windows CE Toolkit for Visual Basic 6.0. Имея этот набор инструментов, Вы сможете писать программы для большинства существующих устройств, работающих под управлением Windows CE, включая H/PC (Windows CE 2.0 или позже), H/PC Pro (Windows CE 2.11 или позже), P/PC (Windows CE 2.11 или позже). В состав Windows CE Toolkit for Visual Basic 6.0 входят все необходимые утилиты для комфортной разработки VB-CE приложений: Application Install Wizard, CE Spy, Registry Editor, Remote Zoom, и многие другие. За все это добро Microsoft просит $200 ($99 в случае обновления; бесплатно для подписчиков Universal Subscription to MSDN).
Особенности
Существующая версия Toolkit работает только под управлением Windows NT/2000. После автоматической установки Microsoft Windows CE Toolkit for Visual Basic 6.0 не требует конфигурирования и готов к работе. Для запуска достаточно выбрать меню Пуск->Программы->Microsoft Visual Studio 6.0 Start. Обратите внимание, что сразу после установки VB Toolkit автоматически запускается установка H/PC SDK. Вы можете отменить ее, если не планируете разрабатывать программы для этой платформы. SDK для других платформ можно бесплатно скачать сmsdn.microsoft.com/cetools (В настоящее время имеются VB SDK для H/PC, H/PC Pro и P/PC.)
Поговорим об отличиях в разработке Visual Basic программ для десктопов и для мобильных устройств. Основное отличие заключается в том, что в CE нет никаких VB runtime DLL. Вместо того чтобы запихивать громоздкую msvbvm60.dll (1.34 MB)в мобильное устройство, Microsoft предлагает использовать VBScript dll (417 KB). Это позволяет значительно сократить размер инсталляционных пакетов. Между тем, Вы лишаетесь нескольких удобных механизмов: при разработке VB CE приложений нельзя использовать ловушки ошибок (On Error Goto MyErrorTrap больше не работает), и статименты Dir и End (для быстрого завершения приложения).
Не расстраивайтесь, VBScript очень богатый язык. На самом деле Вы ни чего не лишились, просто придется освоить несколько новых приемов.
При разработки CE приложений Вы должны стремиться всеми способами уменьшить их размер.
Перейдем к хорошим новостям. CE Toolkit for VB 6.0 позволяет использовать привычные компоненты (Frame, Label, Line, CommandButton, ListBox, Menu, OptionButton, Scrollbar, Shape, TextBox, Timer) или ActiveX (CommandBar, File, FileSystem, Image, PictureBox, Winsock). Помимо этого в «ActiveX Control Pack» включены элементы управления Grid, TabStrip, TreeView, ListView, ImageList, и CommonDialog. Попрощайтесь с Directory, Drive, File List Boxes, Data control и OLE control. Вы также сможете работать с базами данных. В CE есть специальная версия ADO. Если у Вас есть собственные ActiveX Control, которые Вы хотели бы использовать, обратитесь к C++. Visual Basic CE не позволяет использовать дополнительные ActiveX Control.
Другим досадным моментом является невозможность использования стандартного VB debugger-а. В состав Toolkit входит специальный debugger для работы с Windows CE. Фактически это самостоятельная программа, которая запускается отдельно от VB IDE. Вы можете установить точки остановки в CE debugger-е (обычный VB механизм не сработает). Надо сказать, что это не доставляет особых неудобств и через некоторое время, Вы к этому привыкните.
Пример VBCE приложения
Для того, чтобы запустить пример, Вам понадобятся P/PC SDK и ADOCE SDK. Скопируйте файл vbce.mdb в папку «My Documents».Скачать пример (10 KB).
Для этой статьи я написал очень простое VBCE приложение, работающее с базой данных. Я использовал ADOCE Control. В качестве целевой платформы я выбрал P/PC, поэтому моя программа без проблем запустится на новых Windows CE устройствах. Приложение состоит из формы, совмещенной с CommandBar (Microsoft рекомендует использовать command bar для P/PC; в H/PC и H/PC Pro этого не требуется). На форме размещено несколько Label и TextBox для отображения содержимого базы данных, и несколько CommandButton для перемещения от записи к записи. Я также разместил на форме CommonDialog Control и добавил кнопку Help на CommandBar.
Рис 1 — Форма VBCE приложения
Код приложения достаточно прост, тем не менее, мне бы хотелось остановиться на некоторых моментах. CommandBar — это удобный маленький элемент управления, который позволяет Вам размещать меню, выпадающие меню и кнопки для управления приложением. В данном приложении я добавил пункт меню File->Exit, чтобы показать Вам что к чему. В обработчик Form_Load вставлены элементы меню:
Как вы наверно поняли, для добавления нового элемента служит строка
Убедитесь, что задан параметр Key, поскольку в противном случае вы не сможете отловить событие выбора меню: CommandBar_MenuClick.
Обратите внимание на строку App.End. Это единственный способ завершить приложение. Ниже приведено несколько полезных советов. Старайтесь следовать им при разработки приложений для Windows CE
- Устанавливайте свойство формы BorderStyle в 0 — это приведет к максимизации формы и пользователь не сможет щелкнуть мимо нее.
- Старайтесь писать как можно короче. Если в программе можно обойтись без какой-либо функции — не программируйте ее. Помните, что разрабатываете приложение для устройства с сильно ограниченной памятью.
- Помните, что на разных устройствах размер вашей формы может быть различным. Это связано с разницей в разрешениях экранов.
- Помните о том, что к КПК не подключена мышь.
- Сведите к минимуму данные, которые должен вводить пользователь. Никто не станет писать книгу на КПК — для этого есть настольные компьютеры.
- Задайте в имя своего приложения в свойстве Form.Caption главной формы. Именно это значение будет отображаться в менеджере задач.
Распространение вашего VBCE приложения
Toolkit содержит очень полезный Application Install Wizard. Занимая очень мало места, этот мастер обеспечит вас привычными функциями стандартного Visual Studio Package and Deployment Wizard. Вы можете выбрать папку, куда будут копироваться файлы Вашего приложения, установить дополнительные ActiveX компоненты и файлы, а также указать, нужно ли копировать выполняемые VBCE файлы.
Visual basic приложения для windows ce
В данной статье описывается, как разрабатывать Windows-приложения для карманных компьютеров, поддерживающих .NET Compact Framework. Рассматривается весь цикл разработки, отладки и развертывания приложения, а также показываются отличия между .NET Framework и .NET Compact Framework.
Smart Device Extensions (SDE) for Microsoft Visual Studio .NET позволяет применить весь ваш опыт .NET-программирования при разработке Windows-приложений для устройств, поддерживающих Microsoft .NET Compact Framework. С помощью SDE можно создавать приложения для платформ Pocket PC и Microsoft Windows CE .NET, используя знакомые языки — Microsoft Visual Basic .NET и те же инструментальные средства и библиотеки классов, что и при разработке .NET-приложений для настольных компьютеров и серверов. Так как карманные устройства не поддерживают все возможности, предоставляемые их полноразмерными «сородичами», самое сложное — выяснить, какие составные части Microsoft .NET Framework претерпели изменения из-за приведения этой инфраструктуры в соответствие с ограниченными возможностями мобильных устройств. К счастью, среда Visual Studio полностью поддерживает мобильные устройства и, в частности, позволяет отлаживать на настольном компьютере приложения, рассчитанные на эти устройства.
Приложение «Здравствуй, мир!»
Создавать SDE-приложения в Visual Basic .NET очень просто. Начнем с традиционного приложения «Здравствуй, мир!» для демонстрации всего процесса разработки, который состоит из следующих этапов.
- Создание приложения в Visual Studio .NET на настольном компьютере.
- Развертывание приложения на устройстве.
- Отладка приложения в Visual Studio .NET.
Будем считать, что у вас имеется подключенное устройство или (при отсутствии настоящего устройства) эмулятор Pocket PC.
- При необходимости измените местонахождение проекта в поле Location.
- В поле Name введите имя приложения (например, «HelloWorld»). В каталоге, указанном в поле Location, будет создан новый каталог с исходным кодом вашего приложения.
- Щелкните OK.
Создание нового SDE-проекта в Visual Basic .NET.
Откройте диалоговое окно «New Project» и выберите шаблон «Smart Device Application» из группы «Visual Basic Projects» (рис. 1).
Рис. 1. Диалоговое окно New Project, шаблон Smart Device Application
Рис. 2. Smart Device Application Wizard
- Выберите платформу (если будете использовать эмулятор, укажите Pocket PC).
- Выберите тип проекта. Для нашего первого приложения, которое просто будет показывать форму на устройстве, выберите «Windows Application».
- Щелкните OK, после чего мастер создаст проект (это может занять какое-то время).
Вы должны увидеть приложение на Visual Basic .NET.
Теперь создадим небольшую тестовую программу.
- Поместите на форму кнопку (элемент управления Button).
- Дважды щелкните кнопку (или как-то иначе откройте окно кода) и в обработчике события Click кнопки введите следующий код:
- Нажмите , чтобы начать пошаговое выполнение приложения. При этом приложение компилируется (информация о ходе компиляции показывается в окне Output), а затем открывается диалоговое окно Deploy.
- Выберите целевое устройство (мы будем использовать Pocket PC Emulator) и щелкните Deploy, чтобы приступить к развертыванию. Как и при компиляции, информация о ходе развертывания показывается в окне Output, а в строке состояния Visual Studio .NET выводится текущая информация.
Примечание Если в вашей конфигурации SDE есть какие-либо ошибки, они проявятся именно на этом этапе. Если вы прочитали и выполнили инструкции по установке, то, как правило, проблема может возникнуть только одна: не удается соединиться с устройством. Заметьте, что в данной версии SDE даже при использовании эмулятора требуется, чтобы у компьютера был сетевой адрес. Если проблемы с установкой соединения решить не удалось, пожалуйста, прочитайте соответствующую документацию.
Visual Studio .NET свяжется с устройством и установит вашу программу. Прежде всего на устройство установится .NET Compact Framework, если этой инфраструктуры еще не было на устройстве. Затем ваше приложение будет скопировано в каталог \Program Files (по умолчанию). И, наконец, приложение запустится (или запустите его сами).
Рис. 4. Диалоговое окно «HelloWorld», показываемое на устройстве
Итак, мы создали приложение (пусть и тривиальное), развернули его на интеллектуальном устройстве. Все это наверняка показалось вам очень знакомым, так как при разработке других приложений в Visual Studio .NET вы делали почти то же самое. Теперь закончим разработку приложения и создадим редистрибутивный пакет, чтобы вы могли поделиться этой мощной программой с друзьями и удивить их своим мастерством программирования!
Заключительная часть разработки приложения
Так как мы хотим, чтобы наша программа для интеллектуального устройства выглядела как настоящее профессиональное приложение, добавим в нее значок (icon) и создадим редистрибутивный CAB-файл. Затем CAB-файл можно будет открыть и запустить щелчком или касанием указателя (tap), либо предварительно скопировать этот файл на устройство. CAB-файл можно запускать из любого места, так как он содержит всю информацию по установке, необходимую интеллектуальному устройству. При запуске CAB-файла из него автоматически извлекаются файлы приложения и помещаются в подкаталог каталога \Program Files с тем же именем, что и проект для интеллектуального устройства.
Вы можете управлять тем, куда устанавливаются файлы приложения. Для этого нужно перед запуском мастера CAB-файлов указать свой INF-файл (с расширением .inf) и при необходимости библиотеку Setup.dll. В INF-файле задаются каталоги, файлы, параметры и конфигурации. В файле Setup.dll (необязательном) содержатся функции, реализующие операции, которые выполняются при установке или удалении вашего приложения.
Теперь все готово к компиляции приложения и созданию редистрибутивного пакета.
- Выберите Build Cab File в меню Build. При этом в подкаталоге \bin\Debug вашей программы будет создан свой CAB-файл для каждой аппаратной платформы, поддерживаемой SDE. Поскольку имя нашего приложения — «HelloWorld», файл для Pocket PC получит имя HelloWorld_PPC.ARM.cab, а аналогичный файл для эмулятора — HelloWorld_PPC.X86.cab.
На этом этапе CAB-файл программы можно скопировать на устройство. Однако сначала следует убедиться, что на устройстве уже установлена .NET Compact Framework. Если известно, что эта инфраструктура не установлена на устройстве или что требуется создать дистрибутив для других пользователей, тогда вы должны создать CAB-файл для инфраструктуры. По умолчанию эти CAB-файлы устанавливаются с SDE в каталог:
CAB-файлы хранятся в подкаталогах в соответствии с типами процессоров устройств — например, файл с версией инфраструктуры для Pocket PC находится в подкаталоге \arm под именем netcf.cjk.ppc3.arm.cab. Файл с инфраструктурой для эмулятора содержится в подкаталоге \x86 под именем netcf.cjk.ppc3.x86.cab.
Что внутри?
Итак, что же происходит в действительности, когда вы создаете и запускаете SDE-приложение HelloWorld? Самое важное, о чем нужно знать: когда вы выбираете создание SDE-проекта, вы начинаете работать с другим шаблоном, чем при создании настольного проекта. В частности, разработка ведется для .NET Compact Framework, а не для полной версии инфраструктуры.
Рассмотрим структуру только что созданной программы HelloWorld (в принципе, подойдет любой SDE-проект). Окна проекта показаны на рис. 9.
- Откройте окно Solution Explorer.
- Раскройте узел References.
- Выберите ссылку (например, System).
- Посмотрите свойство Path в окне Properties:
C:\Program Files\Microsoft Visual Studio .NET\CompactFrameworkSDK\v1.0.3300\Windows CE\System.dll
Рис. 9. Ссылки SDE-проекта
При разработке настольных приложений используются .NET Framework-сборки, размещаемые в Global Assembly Cache (GAC). Эти сборки находятся в кэше на каждом настольном компьютере, на котором установлена .NET Framework. Однако чтобы воспользоваться сборками при программировании для мобильного устройства, их приходится развертывать на этом устройстве. При установке SDE эти сборки копируются в подкаталог \CompactFrameworkSDK\v1.0.3300\Windows CE каталога Microsoft Visual Studio .NET. Если вы просмотрите содержимое этого подкаталога, то обнаружите подкаталоги arm, mips, sh3 и x86, соответствующие типам процессоров, поддерживаемых .NET Compact Framework. В этих подкаталогах находятся редистрибутивные CAB-файлы.
А сейчас немного базовой информации. При компиляции проекта в Visual Studio .NET исходный код компилируется в одну или несколько сборок (файлов с расширениями .EXE и .DLL). В этих .NET-сборках содержатся метаданные и код на языке MSIL (Microsoft Intermediate Language). Машинный исполняемый код в сборках не содержится. Вместо этого во время выполнения осуществляется компиляция по запросу (JIT-компиляция) MSIL-кода в машинный. Конечно, в ваших приложениях активно используются типы, определенные в библиотеке классов .NET Framework, которая также является набором сборок, содержащих метаданные и MSIL-код. Эти сборки скомпилированы и хранятся на вашем настольном компьютере в каталоге исполняющей среды.
Как вы могли догадаться, в SDE при компиляции сборок, использующих .NET Compact Framework, применяются те же принципы. Поскольку эти сборки содержат MSIL, а не машинный код, при разработке программы на настольном компьютере используются, по сути, те же сборки .NET Compact Framework, что и сборки, развертываемые на устройстве! Можно всесторонне исследовать какую-нибудь из сборок .NET Compact Framework, например, system.dll, с помощью утилиты ildasm.exe из состава .NET Framework SDK (она устанавливается с Visual Studio .NET)
Compact’ный .NET Framework
Пожалуй, основная проблема при работе с мобильными устройствами — их аппаратные ограничения. Очевидно, размер экрана портативных устройств меньше, чем у компьютеров (обычно 320 x 240 пикселов). Мощность процессора у них еще меньше (в первую очередь по соображениям продления срока работы от аккумуляторной батареи). Объем памяти, обычно используемой для длительного хранения данных, у таких устройств тоже намного меньше, чем у компьютеров. Кроме того, используются несколько иные методы ввода. У типичного целевого устройства SDE имеется от 16 до 64 Мбайт памяти для постоянного хранения программ и для их выполнения.
При установке .NET Compact Framework требуется примерно 1,3 Мбайт дискового пространства (общий размер файлов — 2,0 Мбайт, но он сокращается за счет оптимизации хранения файлов в Windows CE). При запуске SDE-программы на устройстве загружаются CLR и код приложения, так что для работы SDE-программы, использующей Windows Forms, требуется минимум 1 Мбайт. Дополнительные копии такого приложения будут требовать значительно меньше памяти (около 0,75 Мб каждая).
Так как общий размер файлов .NET Compact Framework примерно в 20 раз меньше, чем в полной .NET Framework, и, например, Windows Forms-программа для устройства требует в 8 раз меньше памяти, очевидно, что .NET Compact Framework тщательно оптимизирована самыми разными способами.
Библиотека поддержки Visual Basic
В частности, в версии этой библиотеки для мобильных устройств полностью поддерживаются класс Collection, функции преобразования типов, управляющие символы, DateTime, MsgBox и общеупотребительные константы вроде CrLf. Но из библиотеки удалены:
- константы FileAttributes, FileSystem и Open;
- вариантные типы (vbArray, vbBoolean, vbNull и другие типы данных Variant, а также функции VarType);
- преобразования регистра, языка и другие строковые преобразования;
- функция Len (не та, которая работает со строками);
- функции AppActivate, Shell и Environment;
- CreateObject, GetObject, CallByName.
Если проанализировать, какие возможности отсутствуют в .NET Compact Framework, то окажется, что большинство этих упрощений вполне оправданно. Например, в Windows CE используются собственная файловая система, так что код файлового ввода-вывода для Windows CE-устройств будет совершенно другим, чем для настольных компьютеров.
Windows Forms
В большинстве программ для интеллектуальных устройств применяется пользовательский интерфейс на основе Windows. Поэтому изменения, внесенные в Windows Forms, представляют огромный интерес для разработчиков, желающих писать программы для устройств с малым форм-фактором. Поскольку приложения, использующие формы, должны быть отлично знакомы программисту на Visual Basic, ваш предыдущий опыт окажется весьма кстати.
Для начала посмотрим на список элементов управления, входящих в версию Windows Forms для .NET Compact Framework:
Button | PictureBox |
CheckBox | ProgressBar |
Combobox | RadioButton |
DomainUpDoan | StatusBar |
HScrollBar | TabControl |
Label | TextBox |
ListBox | Timer |
MainMenu | TrackBar |
NumericUpDown | VScrollBar |
Panel |
Как видите, основные элементы управления (и не только основные) по-прежнему присутствуют, так что разработка небольших приложений и утилит для интеллектуальных устройств не составляет сложности. Однако некоторые «продвинутые» элементы управления полной версии .NET Framework недоступны. Многие из них, например Command, PropertyStore и ToolTip, или не годятся для портативных устройств, или должны реализовываться в Windows CE совершенно по-другому. Некоторые элементы управления, например Splitter, требуют выполнения пользовательским интерфейсом операций, непривычных большинству пользователей, работающих с портативными устройствами. Другие элементы управления вроде CheckedListBox можно имитировать, комбинируя элементы более низкого уровня. Вы также обнаружите, что недоступны и другие возможности полной версии Windows Forms, такие как HTML Help и средства прямого взаимодействия с операционной системой, например NativeWindows, SendKeys, OSFeature (используется для поддержки тем) и SystemInformation.
Форма и элементы управления
В версии класса Form .NET Compact Framework поддерживаются более трех четвертей событий и методов и примерно половина свойств класса Form полной версии. Можно задавать цвета, некоторые стили, подключать меню. Нельзя создать MDI-приложение, показать форму в панели задач, реализовать операции drag-and-drop и обрабатывать ряд событий клавиатуры (например, нажатие кнопки Cancel), не используемые на портативных устройствах.
Рассмотрим один из элементов управления — TabControl — и обсудим, что в версии для .NET Compact Framework осталось прежним, а что изменилось. Как и раньше, вкладки настраиваются в TabPage Collection Editor:
Рис. 12. Элемент управления TabControl в TabPage Collection Editor
Возможностей для настройки внешнего вида вкладок меньше, чем в полной версии. Не поддерживаются такие «продвинутые» параметры, как свойства группы Behavior (AllowDrop, ContextMenu, ImeMode) и AutoScroll. Но эти параметры используются не часто. Единственное широко применяемое свойство, отсутствующее в компактной версии, — свойство Tag. То же относится и к самому TabControl: основные свойства UI сохранились, но некоторые возможности не применимы к Windows CE-устройствам, поэтому, например, свойства ContextMenu и ToolTipText отсутствуют в компактной версии. Другие свойства просто убраны для сокращения размера элемента управления. Отсутствуют и такие свойства, как Accessibility и DataBinding, — они зависимы от других средств .NET Framework, которые также отсутствуют.
Разработка SDE-приложений
Из-за меньшего размера экрана мобильных устройств есть вероятность, что придется полностью перерабатывать UI. В большинстве случаев при переносе существующих приложений на мобильное устройство единственное, о чем следует беспокоиться, — отсутствие некоторых элементов управления, из-за чего, возможно, придется создавать UI заново.
Так как у мобильного устройства крошечная клавиатура (или она вообще показывается на экране), ввести текст на мобильном устройстве не так просто, как на настольном или наладонном компьютере. Вам придется еще раз подумать о взаимодействии пользователя с приложением, чтобы как можно больше информации вводить через сенсорный экран или выделенные аппаратные кнопки.
.NET Compact Framework SDK, поставляемый с SDE, включает набор программ-примеров, демонстрирующих базовые приемы разработки для платформ портативных устройств. Вы можете использовать эти программы как основу для своих приложений. Доступны следующие примеры.
- Bubble — рисование и заливка графических фигур с помощью кисти на Windows-форме. Также демонстрируется создание потока (thread).
- Calculator — демонстрирует программирование для Windows Forms, в том числе работу с элементами управления и обработку событий.
- Scribbler — версия классической программы рисования Scribble, в которой для рисования на Windows-форме используется GDI+. Кроме того, показывается, как рисовать на поверхности, находящейся за экраном, и отслеживать перемещение мыши.
- Inventory — демонстрирует сериализацию набора данных в XML, использование ADO.NET для доступа к SQL Server и работу с Windows Forms. Кроме того, показывается, как загружать ресурсы с изображениями из файлов.
- Stock Quote — вызов Web-сервиса XML в Windows Forms. В примере содержится и сам Web-сервис.
- WaitCursor — объявление Win32-функций и обращение к ним.
Кроме того, к этому документу прилагаются два примера, демонстрирующие некоторые аспекты программирования для интеллектуальных устройств на Visual Basic.
- Authors — заполнение ListView записями DataSet, создаваемого по XML-документу.
- PowerStatus — объявление Win32-функций операционной системы Windows CE и обращение к ним.
Использование ListView
Одним из элементов управления, чаще всего используемых разработчиками на Visual Basic, является сетка того или иного вида, в которой показываются табличные данные. Хотя в .NET Compact Framework сетки отсутствуют, вместо них можно применить элемент управления ListView, выглядящий так же, как сетка:
Рис. 13. Пример ListView на мобильном устройстве
Как все это работает, показывается в примере Authors, прилагаемом к данному документу. Прежде всего нужно передать данные на устройство. В нашем примере XML-файл копируется на устройство на этапе разработки. Сначала вы должны добавить файл в проект, и обычно для этого используется команда Add Existing Item в Solution Explorer.
Кроме того, можно указать папку, в которую будут помещаться при развертывании исполняемый файл приложения и файл данных. Для этого нужно или задать Output File Folder в окне Properties проекта, или войти в диалоговое окно Properties проекта, выбрать подузел Device Extensions узла Common Properties и ввести путь в поле Output file folder. В нашем примере использовалась папка \Samples\VB.NET, так что в исходном коде также выполняется обращение к файлу в этой папке:
Затем объявляем DataSet:
Теперь мы готовы к тому, чтобы загрузить XML-файл в DataSet методом ReadXml:
А вот обработчик события Load класса Form, где вызывается процедура загрузки, а затем DataSet перебирается в цикле, в котором все записи добавляются в элемент управления ListView:
Наконец, мы задаем свойства элемента управления, в частности Columns. Это делается так же, как и для элемента управления ListView в полной версии .NET Framework, — или в период выполнения, или в редакторе свойств:
Рис. 14. Набор Columns элемента управления ListView
Вызов API-функций
Программисты на Visual Basic традиционно использовали прямые обращения к DLL, входящим в состав Windows (а также к другим DLL), чтобы получить доступ к функциональности, не предоставляемой VB и его исполняющей средой. Первоначально Microsoft Win32 API применялся для работы с INI-файлами, затем — с реестром, а в дальнейшем Win32-функции стали широко использоваться для решения более сложных задач, таких как синхронизация процессов (например, WaitForMultipleObjects) или графические операции (BitBlit, StretchBlit и др.). Большинство этих функций теперь вызывается через классы базовой Framework Class Library. Без преувеличения можно сказать, что доступны тысячи таких классов. Но в некоторых приложениях все же приходится обращаться к Win32-функциям, не имеющим эквивалента в NET Framework (например, к GetPrivateProfileString). В управляемом коде для этого используется подмножество сервисов Interop, называемое PInvoke (сокращение от Platform Invocation). Имейте в виду, что при использовании PInvoke, разработчик не должен забывать о проблемах безопасности, возникающих при вызове неуправляемого кода, и учитывать их в своих программах.
И там, где .NET Compact Framework реализует лишь подмножество полной Framework Class Library, вы можете с помощью PInvoke получить доступ к отсутствующей функциональности, напрямую вызывая соответствующие функции Windows CE API. Так, в .NET Compact Framework-версии Windows Forms класс Cursor не реализован. К счастью, мы можем задействовать Win32-функции LoadCursor и ShowCursor для изменения вида курсора. В Windows CE эти функции находятся в библиотеке coredll.dll, и их объявления выглядят примерно так:
Какой-либо инструмент, например API Text Viewer, входящий в состав Visual Basic 6.0, позволяет выполнить большую часть работы по определению вида соответствующего оператора Declare. Кроме того, вам может потребоваться доступ к Windows CE SDK, чтобы определить, как именно должны вызваться API-функции на платформе Windows CE. В частности, вам может понадобиться передать функциям соответствующие константы и даже структуры. Например, чтобы задать форму курсора как в Windows, нужно знать числовой идентификатор такого курсора:
Тогда задать нужную форму курсора довольно легко:
Законченная программа, показывающая, как все это работает, есть в примере WaitCursor, поставляемом с .NET Compact Framework SDK. Обратите внимание, что курсор «песочные часы» на интеллектуальном устройстве выглядит совершенно по-другому.
Windows CE API
Конечно, есть и функциональность, доступная только в Windows CE; к ней тоже можно обращаться через PInvoke. Например, функция GetSystemPowerStatusEx имеется только в Windows CE API и предназначена для получения информации о состоянии дополнительной аккумуляторной батареи. В стандартном Win32 API такой функции нет. Объявление этой функции несколько сложнее, чем предыдущее объявление:
Первое, что бросается в глаза, — указание типов параметра в объявлении. Эти типы используются, чтобы задать, какие параметры являются входными и какие параметры будут возвращаться. Так как «In» является еще и ключевым словом Visual Basic, приходится заключать «In» в квадратные скобки. Типы «In» и «Out» определяются в InteropServices, следовательно, вы должны импортировать это пространство имен:
Далее вы заметите, что функция возвращает структуру SYSTEM_POWER_STATUS_EX. Чтобы работать с этой структурой, можно или воспользоваться ключевым словом Structure, или поместить ее определение в класс и соответственно упорядочить члены класса:
Обратите внимание, что два члена — BackupBatteryLifeTime и BackupBatteryLifePercent — на самом деле надо поменять местами, а в документации они идут в неправильном порядке.
Теперь вызов функции не представляет сложности:
Ниже показан внешний вид нашей программы-примера и вкладки Power из апплета System в Settings при выполнении на карманном компьютере iPAQ, к которому подключена внешняя батарея. Для устройства, работающего от батареи и успевшего частично ее разрядить, мы увидим следующую картину:
Рис. 16. GetPowerStatusEx и Power на устройстве с частично разряженными батареями
Важно заметить, что не обязательно будут использоваться все поля структуры. Например, iPAQ не передает для внешней батареи, подключаемой по кабелю, BatteryBackupFlag и бит Charging, так что и в нашем примере, и во встроенном модуле Power показывается не вся возможная информация.