значение, показывающее, как было закрыто окно. Если пользователь выбрал кнопку OK
, то возвращается значение DialogResult.OK
. Имя выбранной картинки записывается в свойство FileName
. В листинге 10.17 приведен пример работы с фотокамерой.
private void butPhotoMake_Click(object sender, EventArgs e) {
CameraCaptureDialog cameraCaptureDialog = new CameraCaptureDialog();
cameraCaptureDialog.Owner = this;
cameraCaptureDialog.Title = 'Фотограф';
cameraCaptureDialog.Mode = CameraCaptureMode.Still;
if (cameraCaptureDialog.ShowDialog() == DialogResult.OK &&
cameraCaptureDialog.FileName.Length > 0) {
PictureBox.Image = new Bitmap(cameraCaptureDialog.FileName);
MessageBox.Show('Снято!');
}
}
Для записи видеоролика используется аналогичный способ, но надо поменять режим съемки. Так, для записи видеоматериала вместе со звуком используется режим VideoWithAudio
. Пример записи видеоролика приведен в листинге 10.18.
private void butCaptureClick(object sender, EventArgs e) {
CameraCaptureDialog cameraCapture = new CameraCaptureDialog();
cameraCapture.Owner = null;
cameraCapture.InitialDirectory = @'My Documents':
cameraCapture.DefaultFileName = @'test.3gp';
cameraCapture.Title = 'Камера - Демонстрация';
cameraCapture.VideoTypes = CameraCaptureVideoTypes.Messaging;
cameraCapture.Resolution = new Size(176, 144);
// Лимит в 10 секунд для видео
cameraCapture.VideoTimeLimit = new TimeSpan(0, 0, 10);
cameraCapture.Mode = CameraCaptureMode.VideoWithAudio;
if (DialogResult.OK == cameraCapture.ShowDialog()) {
MessageBox.Show('Картинка или видео успешно записаны в:
{0}',
cameraCapture.FileName);
}
}
Легко заметить, что эти два примера практически идентичны. Существует еще режим записи видео без звукового сопровождения. В этом случае для свойства Mode
задается значение CameraCaptureMode.VideoOnly
. Если перед вызовом метода ShowDialog
использовать свойство DefaultFileName
, то указанное имя будет использоваться как имя файла для записи новых фотографий или видеоматериала. Свойство InitialDirectory
позволяет указать папку, в которой будут сохраняться отснятые материалы. Свойство Resolution
позволяет задать разрешение снимаемого материала, что иллюстрирует следующая строка кода:
cameraCaptureDialog.Resolution = new Size(320, 240);
Свойство StillQuality
позволяет установить качество сжатия для фотографий при помощи перечисления CameraCaptureStillQuality
. Используемые значения перечислены в следующем списке:
□ High
— указывает на наилучшее качество картинки с минимальным сжатием;
□ Normal
— среднее качество картинки;
□ Low
— высокая степень сжатия, плохое качество.
Свойство VideoTimeLimit
позволяет установить максимальную продолжительность записи видеоматериала. По умолчанию используется нулевое значение, что означает отсутствие временного ограничения. В этом случае запись съемки будет вестись до тех пор, пока позволяют ресурсы системы. Свойство VideoTypes
позволяет выбрать тип видеоматериала. На устройствах под управлением Windows Mobile 5.0 используется видеоматериал двух типов — Multimedia Messaging Service (MMS) и Windows Media Video (WMV).
Повторение пройденного
Примеры доступа к объектам Pocket Outlook рассматривались применительно к карманным компьютерам. Но теперь надо воссоздать их, опираясь уже на смартфоны. Сам код примеров останется практически неизменным. Но при этом изменится логика управления программой. Как уже говорилось ранее, управление в смартфонах сводится к обработке событий для пунктов меню.
Встречи
Сначала рассмотрим пример с использованием объекта Pocket Outlook. На этот раз надо получить доступ к списку встреч (Appointment). Перед началом изучения примера вам нужно убедиться, что список событий имеет хотя бы одну запись. Если там ничего нет, то следует создать несколько записей самостоятельно.
После создания нового проекта на форме надо разместить элемент ListView
. Свойство View
должно получить значение Details
. В коллекции Columns
надо задать заголовки Дата
, Время
и Тема
(рис. 10.12). Прежде всего потребуется задать переменную для экземпляра сессии Outlook. Сразу же после вызова метода InitializeComponent
в конструкторе формы объявляем экземпляр для сессии PocketOutlook
, как показано в листинге 10.19.
Рис. 10.12. Внешний вид приложения
private OutlookSession session;
public Form1() {
InitializeComponent();
// Создаем экземпляр сессии Pocket Outlook
session = new OutlookSession();
}
Теперь программист получил доступ к коллекции событий через объект OutlookSession
. Для коллекции Appointment
создается соответствующая переменная, при помощи которой можно получить каждый элемент коллекции, что иллюстрирует код, приведенный в листинге 10.20.
private void menuAppointments_Click(object sender, EventArgs e) {
AppAppts = session.Appointments.Items;
// Проходим через все элементы коллекции
foreach (Appointment appt in AppAppts) {