Но стоит заметить, что у стилуса нет возможности эмулировать нажатие правой кнопки мыши. Когда пользователь применяет стилус, то генерируются события MouseDown
, MouseMove
, MouseUp
и Click
. Первые три события могут сообщить о позиции курсора, как и события из настольной версии Windows.
Так как пользователь при работе использует стилус, то Windows Mobile не отображает на экране устройства стандартную стрелку курсора. Предполагается, что пользователь может самостоятельно попасть острым концом стилуса в маленькую кнопку или другой элемент. Но у мобильных систем курсоры все же есть. Первый из них является аналогом песочных часов в настольной версии Windows и выглядит как анимированный круг с разноцветными секторами. Второй курсор можно увидеть при вызове контекстного меню. Он выглядит как множество маленьких красных кружков, которые постепенно появляются вдоль воображаемой окружности.
При выполнении длительных ресурсоемких операций нужно показать пользователю, что устройство работает, а не зависло. Лучше всего вывести на экран устройства курсор ожидания. В карманных компьютерах в качестве такого курсора используются не песочные часы, как в настольных компьютерах, а анимированный разноцветный круг, Установить данный тип курсора в приложении очень просто, что иллюстрирует фрагмент кода, приведенный в листинге 5.1.
Листинг 5.1
// Устанавливаем курсор ожидания
Cursor.Current = Cursors.WaitCursor;
// возвращаем курсор по умолчанию
Cursor.Current = Cursors.Default;
На рис. 5.1 показано приложение с соответствующим курсором.
Рис. 5.1. Отображение курсора ожидания
Обработка события Tap-and-Hold
Так как в карманных компьютерах не используется правая кнопка мыши, то для вызова контекстного меню используется операция Tap-and-Hold. Пользователь касается стилусом экрана и некоторое время удерживает нажатие. Если элемент, на поверхности которого находится стилус, связан с элементом ContexMenu
, то на экране появится контекстное меню. А что делать, если мы хотим создать собственный обработчик события Tap-and-Hold? В этом случае надо добавить в проект таймер и написать код для обработки событий Mouse_Down
, Mouse_Up
и timer1_Tick
. Для таймера следует задать интервал, необходимый для инициирования события. Сам код приведен в листинге 5.2.
Листинг 5.2
private void Form1_MouseDown(object sender, MouseEventArgs e) {
// включаем таймер
timer1.Enabled = true;
}
private void Form1_MouseUp(object sender, MouseEventArgs e) {
timer1.Enabled = false;
label1.Text = "";
}
private void timer1_Tick(object sender, EventArgs e) {
label1.Text = "Вы нажали на экран";
}
На большинстве карманных компьютеров нет стандартной клавиатуры, поэтому ввод текста осуществляется с помощью виртуальной клавиатуры SIP. В Visual Studio 2005 клавиатура SIP представлена элементом InputPanel
. Но в последнее время стали появляться устройства с настоящей встроенной клавиатурой. Как правило, эти устройства имеют квадратный экран. Среда разработки поддерживает эмуляторы подобных моделей (рис. 5.2). Эти эмуляторы в своем названии содержат слово «Square».
Рис. 5.2. Эмулятор устройства с клавиатурой
Кроме того, на устройствах имеются клавиши навигации, клавиша Enter
и кнопки запуска определенных приложений. Все эти клавиши могут обрабатывать стандартные события.
Если вы в процессе создания приложения в режиме работы с формой щелкнуть мышью на любой из кнопок навигации, то среда разработки сгенерирует код для этих кнопок в событии Form_KeyDown
. В листинге 5.3 приведен пример обработчика этого события.
Листинг 5.3
private void Form1_KeyDown(object sender, KeyEventArgs e) {
if ((e.KeyCode == System.Windows.Forms.Keys.Up)) {
label1.Text = "Клавиша Вверх";
}
if ((e.KeyCode = System.Windows.Forms.Keys.Down)) {
label1.Text = "Клавиша Вниз";
}
if ((e.KeyCode == System.Windows.Forms.Keys.Left)) {
label1.Text = "Клавиша Влево";
}
if ((e.KeyCode == System.Windows.Forms.Keys.Right)) {
label1.Text = "Клавиша Вправо";
}
if ((e.KeyCode == System.Windows.Forms.Keys.Enter)) {
Читать дальше