- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Программирование КПК и смартфонов на .NET Compact Framework - Александр Климов
Шрифт:
Интервал:
Закладка:
private void button1_Click(object sender, EventArgs e) {
listBox1.SelectedIndex =
SendMessage(listBox1.Handle, LB_FINDSTRINGEXACT, -1, "ball");
}
ListView
Возможно, вы замечали, что в некоторых программах используется элемент ListView с градиентной заливкой. Например, такое оформление интерфейса можно увидеть в списке контактов. Оказывается, совсем не сложно применить такую раскраску в своем приложении. Но для этого надо использовать стиль LVS_GRADIENT, как показано в листинге 4.7.
Листинг 4.7using System.Runtime.InteropServices;
[DllImport("coredll.dll")]
static extern int SendMessage(IntPtr hwnd, uint msg, int wParam, int lParam);
const int LVS_EX_GRADIENT = 0x20000000;
const int LVM_SETEXTENDEDLISTVIEWSTYLE = 0x1000 + 54;
// Создаем градиентный фон для ListView
private void CreateGradientListView(ListView listView) {
// Получим дескриптор ListView
IntPtr hLV = listView.Handle;
// Устанавливаем расширенный стиль
SendMessage(hLV, (uint)LVM_SETEXTENDEDLISTVIEWSTYLE, 0, LVS_EX_GRADIENT);
// Обновляем вид
listView.Refresh();
}
private void Form1_Load(object sender, EventArgs e) {
CreateGradientListView(listView1);
}
Создание кнопки, содержащей изображение
В статье «How to: Create a Custom Image Button Control», которую можно отыскать по адресу msdn2.microsoft.com/en-us/library/ms172532(VS.80).aspx, описывается процесс создания кнопки, которая может содержать в качестве фона любое изображение. В первых версиях .NET Compact Framework кнопку вообще нельзя было сделать цветной, так как не существовало свойства BackColor. Потом данный недостаток был исправлен, но стандартными средствами пока не получится отобразить на кнопке рисунок. С помощью примера, который приводится в статье, можно обойти это ограничение.
Список с расширенными возможностями
В другой статье — «How to: Create an Owner-Drawn List Box», расположенной по адресу msdn2.microsoft.com/en-us/library/ms229679(VS.80).aspx, — описывается создание списка ListBox с расширенными возможностями. В этом примере показано, как можно использовать графику и различные шрифты для отображения элементов списка.
Текстовое поле для ввода чисел
Очень часто программистам необходимо создавать текстовые поля, в которых можно указывать только числа. В статье «How to: Create a Numeric Text Box», которую можно найти по адресу msdn2.microsoft.com/en-us/library/ms229644(VS.80).aspx, рассказывается об одном из таких способов. Прочитав статью, вы поймете, как создавать текстовые поля, допускающие ввод только чисел, минуса, пробела и разделителя десятичных чисел.
Сортировка элементов ListView
Элемент управления ListView в .NET Compact Framework не поддерживает метод Sort, который позволил бы отсортировать элементы списка. В документации MSDN есть статья «How to: Sort ListView Items», в которой рассказывается о том, как решить эту проблему при помощи метода Sort класса ArrayList и интерфейса IComparer.
Использование элемента DateTimePicker
Элемент управления DateTimePicker появился только в последней версии .NET Compact Framework 2.0. В документации MSDN есть ряд замечательных статей о том, как создать собственный элемент DateTimePicker для программ, работающих на платформе .NET Compact Framework 1.0. Стоит ознакомиться со статьями «Adding Designer Support to the .NET Compact Framework DateTimePicker Control» и «Microsoft .NET Compact Framework-based DateTimePicker Control».
Глава 5
Мышь и клавиатура
Мышь и стилус
Взаимодействие с программой пользователь осуществляет с помощью стилуса или аппаратных кнопок на самом устройстве. А где же мышь и клавиатура? Ну, предположим, что клавиатуру можно заменить ее виртуальным аналогом на экране КПК. Она имеет практически ту же функциональность, что и настоящая клавиатура. Кроме того, следует помнить, что существуют КПК с настоящей, хоть и маленькой, клавиатурой. Что же касается мыши, то ее роль с успехом выполняет стилус.
Но стоит заметить, что у стилуса нет возможности эмулировать нажатие правой кнопки мыши. Когда пользователь применяет стилус, то генерируются события 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.2private 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.3private 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)) {
label1.Text = "Клавиша Enter";
}
}
Как видите, приложение определяет нажатую клавишу при помощи перечисления System.Windows.Forms.Keys. Если открыть виртуальную клавиатуру и нажать на клавиши со стрелками, то можно убедиться, что они тоже инициируют событие Form_KeyDown (рис. 5.3). Если протестировать пример на устройстве с настоящей клавиатурой, то можно заметить, что приложение правильно обрабатывает нажатие на встроенные клавиши со стрелками.

