Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework

Тут можно читать онлайн Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming, издательство Питер, год 2007. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Программирование КПК и смартфонов на .NET Compact Framework
  • Автор:
  • Жанр:
  • Издательство:
    Питер
  • Год:
    2007
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-91180-270-7
  • Рейтинг:
    4.88/5. Голосов: 81
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 100
    • 1
    • 2
    • 3
    • 4
    • 5

Александр Климов - Программирование КПК и смартфонов на .NET Compact Framework краткое содержание

Программирование КПК и смартфонов на .NET Compact Framework - описание и краткое содержание, автор Александр Климов, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Мобильные устройства все активнее вторгаются в нашу жизнь. Карманные компьютеры и смартфоны давно утратили статус дорогих игрушек и перекочевали в разряд необходимых устройств. Значит, для них необходимо создавать программное обеспечение. Так почему вы должны оставаться в стороне?

Прочитав эту книгу, вы получите знания, которые позволят вам уверенно создавать программы для карманных компьютеров и смартфонов. А огромное количество разнообразных примеров поможет быстро совершенствоваться и развиваться, обогащая свой опыт работы.

Книга предназначена для начинающих программистов.

Программирование КПК и смартфонов на .NET Compact Framework - читать онлайн бесплатно полную версию (весь текст целиком)

Программирование КПК и смартфонов на .NET Compact Framework - читать книгу онлайн бесплатно, автор Александр Климов
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Так как .NET Compact Framework не позволяет создавать округленные прямоугольники встроенными средствами, то необходимо самостоятельно реализовать эту задачу. В этом разделе будет рассматриваться решение, предложенное Алексом Яхниным (Alex Yakhnin) в его блоге blog.opennetcf.org/ayakhnin/. Для достижения заданного эффекта надо нарисовать серию линий, которые соединяют эллипсы, и закрасить внутреннюю область сплошным цветом (рис. 6.7).

картинка 45

Рис. 6.7. Создание прямоугольника со скругленным углами

Соответствующий код приведен в листинге 6.19.

Листинг 6.19

public static void DrawRoundedRectangle(Graphics g, Pen p, Color backColor,

Rectangle rc, Size size) {

Point[] points = new Point[8];

// подготовим точки для фигуры

points[0].X = rc.Left + size.Width / 2;

points[0].Y = rc.Top + 1;

points[1].X = rc.Right - size.Width / 2;

points[1].Y = rc.Top + 1;

points[2].X = rc.Right;

points[2].Y = rc.Top + size.Height / 2;

points[3].X = rc.Right;

points[3].Y = rc.Bottom - size.Height / 2;

points[4].X = rc.Right - size.Width / 2;

points[4].Y = rc.Bottom;

points[5].X = rc.Left + size.Width / 2;

points[5].Y = rc.Bottom;

points[6].X = rc.Left + 1;

points[6].Y = rc.Bottom - size.Height / 2;

points[7].X = rc.Left + 1;

points[7].Y = rc.Top + size.Height / 2;

// приготовим кисть для фона

Brush fillBrush = new SolidBrush(backColor);

// рисуем отрезки и круги для округленного прямоугольника

g.DrawLine(p, rc.Left + size.Width / 2, rc.Top,

rc.Right - size.Width / 2, rc.Top);

g.FillEllipse(fillBrush, rc.Right - size.Width, rc.Top,

size.Width, size.Height);

g.DrawEllipse(p, rc.Right - size.Width, rc.Top, size.Width, size.Height);

g.DrawLine(p, rc.Right, rc.Top + size.Height / 2, rc.Right,

rc.Bottom - size.Height /2);

g.FillEllipse(fillBrush, rc.Right - size.Width, rc.Bottom - size.Height,

size.Width, size.Height);

g.DrawEllipse(p, rc.Right - size.Width, rc.Bottom - size.Height,

size.Width, size.Height);

g.DrawLine(p, rc.Right - size.Width / 2, rc.Bottom,

rc.Left + size.Width / 2, rc.Bottom);

g.FillEllipse(fillBrush, rc.Left, rc.Bottom - size.Height,

size.Width, size.Height);

g.DrawEllipse(p, rc.Left, rc.Bottom - size.Height,

size.Width, size.Height);

g.DrawLine(p, rc.Left, rc.Bottom - size.Height / 2,

rc.Left, rc.Top + size.Height / 2);

g.FillEllipse(fillBrush. rc.Left, rc.Top, size.Width, size.Height);

g.DrawEllipse(p, rc.Left, rc.Top, size.Width. size.Height);

// заполняем прямоугольник, скрывая внутренние эллипсы

g.FillPolygon(fillBrush, points);

// освобождаем ресурсы

fillBrush.Dispose();

}

private void butDrawRoundedRectangle_Click(object sender, EventArgs e) {

Graphics g = CreateGraphics();

Rectangle rc = new Rectangle(10, 10, 200, 50);

DrawRoundedRectangle(g,

new Pen(Color.Black), Color.CadetBlue, rc, new Size(8, 8));

}

Результат работы этого кода показан на рис. 6.8.

Рис 68 Отображение закрашенного прямоугольника со скругленными углами - фото 46

Рис. 6.8. Отображение закрашенного прямоугольника со скругленными углами

Создание экранных снимков

Если при работе с мобильным устройством необходимо сделать скриншоты, то для реализации замысла необходимо использовать внешние устройства. Конечно, можно просто сфотографировать экран, но настоящий программист будет использовать функции Windows API. В этом разделе главы будет рассматриваться пример копирования определенной области окна, всего рабочего окна программы или любого другого окна. Для демонстрации примера надо разместить на форме список, три кнопки и один таймер. Сам код приведен в листинге 6.20.

Листинг 6.20

[DllImport("coredll.dll", EntryPoint = "GetDesktopWindow")]

public static extern IntPtr GetDesktopWindow();

[DllImport("coredll.dll", EntryPoint = "GetDC")]

public static extern IntPtr GetDC(IntPtr hWnd);

[DllImport("coredll.dll", EntryPoint = "ReleaseDC")]

public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC);

[DllImport("coredll.dll")]

public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest,

int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);

const int SRCCOPY = 0x00CC0020;

private void screenshot(string filename, Graphics gx, Rectangle rect) {

Bitmap bmp = new Bitmap(rect.Width, rect.Height);

Graphics g = Graphics.FromImage(bmp);

BitBlt(g.GetHdc(), 0, 0, rect.Width, rect.Height, gx.GetHdc(),

rect.Left, rect.Top, SRCCOPY);

bmp.Save(filename, System.Drawing.Imaging.ImageFormat.Bmp);

bmp.Dispose();

g.Dispose();

}

private void butPartOfWindow_Click(object sender, EventArgs e) {

// Делаем снимок списка

ScreenShot(@"\My Documents\save.bmp", this.CreateGraphics(),

listBox1.Bounds);

}

private void butScreen_Click(object sender, EventArgs e) {

// Делаем снимок экрана

Rectangle rect = new Rectangle(0,0,240,240);

Bitmap bmp = new Bitmap(rect.Width, rect.Height);

Graphics g = Graphics.FromImage(bmp);

IntPtr hwnd = GetDesktopWindow();

IntPtr hdc = GetDC(hwnd);

BitBlt(g.GetHdc(), 0, 0, rect.Width, rect.Height, hdc, rect.Left,

rect.Top, SRCCOPY);

bmp.Save(@"\My Documents\screen.bmp",

System.Drawing.Imaging.ImageFormat.Bmp);

// Освобождаем ресурсы

ReleaseDC(hwnd, hdc);

bmp.Dispose();

g.Dispose();

}

private void timer1_Tick(object sender, EventArgs e) {

// Делаем снимок экрана через 5 секунд

Rectangle rect = new Rectangle(0, 0. 240, 240);

Bitmap bmp = new Bitmap(rect.Width, rect.Height);

Graphics g = Graphics.FromImage(bmp);

IntPtr hwnd = GetDesktopWindow();

IntPtr hdc = GetDC(hwnd);

BitBlt(g.GetHdc(), 0, 0, rect.Width, rect.Height, hdc, rect.Left,

rect.Top, SRCCOPY);

bmp.Save(@"\My Documents\5sec.bmp", System.Drawing.Imaging.ImageFormat.Bmp);

// Освобождаем ресурсы

ReleaseDC(hwnd, hdc);

bmp.Dispose();

g.Dispose();

timer1.Enabled = false;

}

private void but5Sec_Click(object sender, EventArgs e) {

timer1.Enabled = true;

}

Функция ScreenShotпозволяет быстро получить участок экрана и сохранить его в графическом файле. В рассмотренном примере внешний вид списка сохраняется в файле listbox.bmp . Для этого достаточно было указать имя файла, объект Graphicsи размеры списка ListBox. Для получения снимка экрана пример пришлось несколько усложнить, добавив вызовы функций GetDesktopWindowи GetDC.

Если нужно получить снимок другой программы, то придется воспользоваться таймером. После запуска таймера в распоряжении пользователя будет 5 секунд, чтобы запустить другое приложение. Основная программа будет работать в фоновом режиме и сделает снимок экрана.

Чтобы проверить работу приложения, нужно запустить программу, нажать каждую кнопку, а затем с помощью программы File Explorer найти сохраненные файлы.

ВНИМАНИЕ

Нужно проявлять определенную осторожность при работе с методом Bitmap.Save(). Дело в том, что в Windows Mobile 2003 и более ранних версиях операционных систем библиотека .NET Compact Framework не поддерживает сохранение графических файлов в форматах GIF, JPEG или PNG. Сохранять файлы можно только в формате BMP. Причем во время написания кода редактор не заметит ошибки и позволит запустить программу с неправильным вызовом метода. Однако при вызове метода возникнет исключение NotSupportedException. К счастью, в Windows Mobile 5.0 поддерживаются все четыре графических формата.

Метод Lockbits

В .NET Compact Framework 2.0 появилась ограниченная поддержка метода LockBits, при помощи которого можно манипулировать массивом пикселов изображения. Перечисление ImageLockModeв данном методе позволяет использовать значения ReadWrite, ReadOnlyи WriteOnly. А перечисление PixelFormatподдерживает значения, перечисленные в следующем списке:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Александр Климов читать все книги автора по порядку

Александр Климов - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Программирование КПК и смартфонов на .NET Compact Framework отзывы


Отзывы читателей о книге Программирование КПК и смартфонов на .NET Compact Framework, автор: Александр Климов. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x