Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework
Создание приложения для смартфона
В главе 7 уже создавался проект, рассчитанный на работу с смартфоном. Мы тогда немного забежали вперед. Настало время вернуться к истокам и начать изучение с самого начала.
Запустите Visual Studio 2005 для создания нового проекта. Надо выбрать тип проекта Smartphone 2003. Для этого типа применяется только .NET Compact Framework 1.0. Сразу после создания надо запустить эмулятор при помощи команды меню Debug►Start Debugging. На экране будет отображено окно Deploy со списком имеющихся эмуляторов. Нужно выбрать эмулятор и нажать кнопке Deploy. Если все прошло нормально, то эмулятор будет загружен с пустой формой. В первом упражнении надо лишь проверить возможности работы с эмулятором. Поэтому надо закрыть приложение (но не эмулятор!) и продолжить работу с приложением в режиме проектирования.
ПРИМЕЧАНИЕТак как у приложений для смартфонов нет кнопки закрытия окна, то непонятно, как можно закрыть программу. Можно нажать кнопку Stop Debugging. Если на эмуляторе нажать кнопку с красным телефоном, то окно программы будет свернуто, а не закрыто, и все равно придется воспользоваться первым способом для закрытия приложения.
Создание меню
Практически все программы для смартфонов работают при помощи команд меню. Поэтому надо получить базовые навыки работы с этим элементом управления. В режиме проектирования формы следует щелкнуть мышью в левой части голубой полоски, которая расположена в нижней части экрана. Эта полоска является элементом меню, которое вызывается нажатием кнопки Soft Key1, находящейся под экраном. На форме появится текст Type Here (рис. 9.1).
Рис. 9.1. Создание меню
В этой области нужно ввести слово Привет и нажать клавишу Enter. Введенный текст появится в левой части формы, и будет активирована Soft Key 2 с той же надписью Type Here. В этой области нужно ввести слово Закрыть. Теперь можно вводить текст для подменю. Новый пункт меню получит заголовок Выход. Перед словом Выход появится единица. Среда разработки Visual Studio 2005 автоматически вставляет цифры в создаваемое меню. Эти цифры являются номерами кнопок-клавиш телефонов. С помощью этой подсказки пользователь может быстро активировать нужный пункт меню нажатием соответствующей кнопки (рис. 9.2).
Рис. 9.2. Создание подменю
Теперь нужно перейти на форму и дважды щелкнуть на пункте созданного меню Выход. В результате будет открыт редактор кода с заготовкой функции menuItem3_Click. Ее код приведен в листинге 9.1
Листинг 9.1private void menuItem3_Click(object sender, EventArgs e) {
this.Close();
}
После запуска приложения следует нажать правую серую кнопку под экраном. При этом будет активирована правая часть меню и появится пункт 1 Выход. Для выполнения этой команды можно нажать клавишу 1 или большую кнопку в центре телефона, которая выполняет функцию клавиши подтверждения. Если все было сделано правильно, то приложение закроется. Итак, только что мы создали приложение для смартфона, добавили в него меню, запустили приложение и закрыли его.
В отношении меню приложения для смартфонов установлено специальное правило. Клавиша Left Softkey может иметь только один пункт меню, а клавиша Right Softkey может иметь разветвленное меню. Любопытно отметить, что при попытке создания подменю для левой клавиши предыдущая версия среды разработки Visual Studio 2003 выводила ошибку. Теперь такой ошибки не выводится, и, теоретически, ничто не мешает нарушить установившуюся традицию. Например, при использовании примеров для смартфонов под управлением Windows Mobile 5.0 программист может создавать вложенные меню для левой кнопки.
Элементы управления
Так как пользователь лишен возможности пользоваться стилусом, то многие элементы управления смартфонами не поддерживаются.
В этом легко убедиться, достаточно лишь взглянуть на панель инструментов проекта для смарфтонов, чтобы увидеть, как резко уменьшилось число поддерживаемых объектов.
Поначалу количество не поддерживаемых элементов управления приводит в замешательство. Как же писать приложения, если смартфон не поддерживает такой распространенный элемент, как кнопка? Так как в смартфонах не используется стилус, то применение кнопок просто бессмысленно. Управление объектами в приложениях для смартфонов осуществляется при помощи реальных кнопок-клавиш.
Кроме стандартных кнопок с цифрами у смартфона имеются еще так называемые softkey-клавиши. Это две дополнительные кнопки под экраном, которые выполняют очень важные функции в приложениях. Именно с помощью этих кнопок осуществляется работа с меню.
Также надо помнить, что внешний вид элементов управления зачастую отличается от вида аналогичных элементов на КПК. Возьмем, к примеру, текстовое поле. Текстовое поле TextBox в смартфонах не имеет окантовки. Она появляется только в том случае, когда текстовое поле получает фокус. В этом нетрудно убедиться на простом примере.
Следует добавить на форму два текстовых поля. Одно из них автоматически получит фокус при загрузке приложения (рис. 9.3). Если с помощью клавиши навигации перейти на второе поле, то оно получит окантовку, а у первого поля, соответственно, окантовка пропадет.
Рис. 9.3. Окантовка у первого текстового поля, имеющего фокус
Чтобы не путать текстовые поля с элементами Label, в надписях используют более жирный текст. На форме надо расположить два элемента Label. На рис. 9.4 видно, что строки label1 и label2 выделяются более жирным начертанием текста. На этом различия не заканчиваются.
Рис. 9.4. Различия внешнего вида некоторых элементов управления
Стоит расположить на форме еще одно текстовое поле и для его свойства Multiline указать значение True. В поле надо ввести какой-нибудь длинный текст. После запуска проекта будет видно, что текстовое поле не в состоянии уместить весь текст, а показывает только несколько первых слов с завершающим маленьким треугольником.
Если установить фокус ввода на этом текстовом поле и нажать кнопку Enter, то текст полностью будет показан в новом окне (рис. 9.5).
Рис. 9.5. Полный текст в текстовом поле
Пользователь может самостоятельно дописать слова песни в новом окне и выбрать команду Done или отказаться от подтверждения ввода с помощью команды Cancel.
То же самое касается и элемента ComboBox. Данный элемент получает окантовку при получении фокуса и отображает уже два треугольника. Чтобы раскрыть список элементов, хранящихся в комбинированном окне, необходимо сначала установить фокус и нажать на кнопку Enter. При этом будет открыто новое окно, в котором с помощью клавиш навигации пользователь может выбрать необходимый элемент и выполнить команду меню Done.
Существует также альтернативный способ выбора элемента из ComboBox. Для этого нужно опять установить фокус на комбинированном окне и прокручивать имеющиеся записи при помощи кнопок навигации Влево или Вправо.
Режимы ввода
Первые модели сотовых телефонов для отправки сообщений имели только один режима ввода. Пользователь нажимал на кнопки телефона в определенном порядке, вводя тот или иной символ. Затем появились другие режимы. В частности, сейчас поддерживается числовой режим, так называемый режим T9 и символьный режим. Поначалу библиотека .NET Compact Framework не имела поддержки режимов ввода. Поэтому для установки необходимого режима программистам приходилось использовать механизм P/Invoke для вызова функций API, как показано в листинге 9.2.
Листинг 9.2[DllImport("coredll.dll", EntryPoint = "SendMessage")]
private static extern uint SendMessage(IntPtr hWnd, uint msg,
uint wParam, uint lParam);
// Сообщение для режима ввода
const uint EM_SETINPUTMODE = 0x00DE;
// Перечисление режимов ввода
public enum InputModeAPI {
Spell = 0,
T9 = 1,
Numbers = 2,
Text = 3
}
public static void SetInputMode(Control ctrl, InputModeAPI mode) {
SendMessage(ctrl.Handle, EM_SETINPUTMODE, 0, (uint)mode);
}
private void mnuT9_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.T9);
}
private void mnuSpell_Click(object sender, EventArgs e) {
SetInputMode(textBox3, InputModeAPI.Spell);