View
273
Download
16
Category
Preview:
Citation preview
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 1
ОбзорГрафической библиотекиMicrochip Graphics Library
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 2
Терминологияl Application Programming Interface (API): Набор функций, которые могут быть вызваны из Вашей программы дляполучения доступа к другой программе или библиотеки.
l Графические примитивы: графический элемент, такойкак точка, линия, окружность и т.п. из которых можносоздать более сложные Графические Объекты
l Графические объекты: любые из различныхграфических форм, которые можно использовать вкачестве элементов управления (кнопки, графики, слайдеры и т.п.). Эти объекты можно использовать дляполучения сообщения от пользователя системы.
l Виджет: другое имя Графического Объекта.l Глиф, символ: графическое представление в том илиином шрифте всех отдельных символов письма (букв, иероглифов, цифр, знаков пунктуации и т.п.)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 3
Графическая библиотека
СтатичныйСтатичный тексттекст
кнопкикнопки
КартинкаКартинка
Ключевые моменты:l Работает с 16- и 32-х битными контроллерами
Microchipl Модульная структура – Подключайте только
то, что Вам нужноl Не зависит от размера экрана и разрешенияl Низкие требования по памяти и
производительностиl Средства разработки и отладки
FREE
РазноязычныеРазноязычные шрифтышрифты
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 4
Структура библиотеки
Graphics Display
Draw Function 1(i.e. 3D Button)
Draw Function 2(i.e. Progress Bar)
Draw Function N
Application Layer
Message Interface
Device Driver Layer
Graphics Primitive Functions(Non-accelerated Line, Circle, Bar, OutText, etc.)
Graphics Primitives Layer
Graphics Objects Layer
Основныемодули
Низкоуровневыефункции
Прикладнаяпрограмма
……
FREEFREE
Key Pad Touch ScreenSide Button
Display Device Driver(i.e. PutPixel, GetPixel)
Graphical Accelerator(Optional)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 5
Настройка библиотеки#defines в GraphicsConfig.h
l Выбрать методы управленияl Сенсорный дисплей или клавиатура
l Выберете используемые заготовкиl кнопки, checkbox, слайдер, и т.п.
l Вкл/Выкл фокусировку объектовl Графический режим
l монохромныйl Ориентация экранаl Поддержка UNICODE
l Выберете место расположения шрифтов икартинокl Внутренняя Flash, внешняя память или оба
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 6
СозданиеДрайвера для дисплея
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 7
Основные задачидрайвера дисплея
l Инициализация дисплея (ResetDevice())l Перевод координат x,y в адрес буферафрейма
l Запись информации о цвете (яркости) по этому адресу (PutPixel(…))
l Инициализация и управления доп. функциями дисплеяl Timing controllerl Аппаратного акселератора
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 8
Низкоуровневый драйвер
l Нам нужно знатьl Интерфейс с МК
l если RGB шина, нужно использовать микросхемуграфического контроллера
l Интерфейс типа I80 или M68 – используйте ПараллельныйМастер Порт (Parallel Master Port -- PMP)
l Так же встречается SPIl Получите код инициализации от производителяиндикатораl Лучше качество изображения
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 9
Display Device Driver Layer
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 10
Структура директории библиотеки
[MyDriver].cПоместите тут
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 11
Структура директории библиотеки
[MyDriver].hПоместите тут
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 12
Уровень примитивовГрафической библиотеки Microchip
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 13
Уровень примитивов
l Общается напрямую с драйверомl Compile time options in GraphicsConfig.h:
l Выбор драйвераl Расположение шрифтов (внутр. память, внешняяили обе)
l Расположение картинок (внутр. память, внешняяили обе)
l Поддержка Юникода (AN1182)l Должны быть включены в проект:
l primitive.cl primitive.h
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 14
Функции уровня примитивов
l Функции установки:l InitGraph() – инициализация дисплеяl ClearDevice()
lОчищает экран установленным цветомl Устанавливает курсор в позицию (0,0)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 15
Функции уровня примитивовСвойства рисования
l Влияют на свойства примитивов доследующего Setl SetColor(COLOR)
lмакрос COLOR расположен в driver.hl SetFont(&fontimage)
l &fontimage – указатель на структуру шрифтаl SetLineType(key)
l SOLID_LINEl DOTTED_LINEl DASHED_LINE
l SetLineThickness(key)l NORMAL_LINEl THICK_LINE
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 16
SetColor()Создание нового цвета
l Используйте макрос RGB565Convert(R,G,B)l Бесплатная утилита на www.colorschemer.com
l Пример: l Установите цвет фона BLACKl Установите цвет точки WHITEint main(void){…SetColor(BLACK);ClearDisplay();SetColor(WHITE);…}
Now we have whiteobjects on a black screen
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 17
int main(void){….SetColor(BRIGHTRED);SetLineType(SOLID_LINE);SetLineThickness(THICK_LINE);Line(x1, y1, x2, y2);Bar(left, top, right,bottom);SetColor(BLACK);SetLineType(DOTTED_LINE);Rectangle(left, top, right,bottom);…}
(x1, y1)
(x2, y2)
(left, top)
(right, bottom)(left, top)
(right, bottom)
Функции уровня примитивов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 18
(x1, y1)
(r)
(x1, y1)
(r)
x1, y1, r1
x2, y2, r1
Функции уровня примитивовint main(void){….SetColor(BRIGHTBLUE);SetLineType(SOLID_LINE);SetLineThickness(NORMAL_LINE);Circle(x1, y1, r);SetColor(BRIGHTGREEN);FillCircle(x1, y1, r);SetLineThickness(THICK_LINE);Bevel(x1, y1, x2, y2, r1);….}
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 19
Функции уровня примитивовx1,y1, r1
x2,y2, r1
(xT, yT)Octant = 0xC3
1
234
5
07
6 r1r2
(xB, yB)
int main(void){….SetColor(BRIGHTBLUE);SetLineType(SOLID_LINE);SetLineThickness(NORMAL_LINE);FillBevel(x1,y1,x2,y2,r1);SetColor(BRIGHTRED);Arc(xT,yT,xB,yB,r1,r2,Octant);….}
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 20
Уровень примитивовШрифты
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 21
Шрифты
l Библиотека поддерживает…l True Type и Open Type шрифтыl Растровые шрифты
l Изображения шрифтов …l Могут храниться в Памяти программ или внешнейпамяти
l Доступно создание «фильтрованных» шрифтовl Поддержка юникода
l AN1182 -- Fonts in the Microchip Graphics Library
ШрифтШрифт этоэто файлфайл, , содержащийсодержащий наборнабор символовсимволов, , буквбукв, , цифрцифр, , ии ..тт..пп.. ШрифтыШрифты создаютсясоздаются вв редакторередакторешрифтовшрифтов ии часточасто связанысвязаны сс работойработой дизайнеровдизайнеров. . ГотовыеГотовые шрифтышрифты доступныдоступны изиз многихмногих источниковисточников, , ноно могутмогут требоватьтребовать лицензированиялицензирования..
Определение:
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 22
Использование шрифтов
l Преобразователь шрифтов и картинокl Бесплатная утилита, содержится в библиотекеl Преобразует в формат, понятный библиотеке
Как запустить:Start ► Programs ► Microchip ► Graphics Library v1.75 ►Bitmap and Font converter
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 23
Фильтр для Шрифта
l Используется чтобы уменьшить память занимаемуюшрифтомl Глифам назначаются новые кодыl Требуется создать текстовый файл фильтра (font filter file)l Все сгенерированные файлы должны быть добавлены впроект
Font Filter(Text File)
Font File
FontConverter
CHeader File
(*.h)
Font Table(C, Hex, orBinary File)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 24
Формат Файла Фильтраl Редактор должен поддерживать16-bit
unicode форматl Каждая линия должна иметь 3 секции:l <String Label>:<String>//<comments>
l “//” разделитель необходимl Комментарии необязательны
l После редактирования строк шрифтдолжен быть сгенерирован зановоl Теряется возможность адресовать каждуюбукву используя UNICODE или ASCII.
l App Note 1182 посвящена этой теме
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 25
Использование шрифтоввнутренняя память
Добавьтефайл в проект
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 26
Использование Шрифта
extern const char L11298[] __attribute__((aligned(2)));//NAME CAN BE CHANGED HERE.const struct{short mem; const char* ptr;} internalfont ={0,L11298};const char L11298[] __attribute__((aligned(2))) ={0x00,0x00,0x20,0x00,0x7F,0x00,0x00,0x23,0x00,0x06,0x88,0x01,0x00,0x08,0xAB,0x01,0x00,0x0C,0xCE,0x01,0x00,0x0E,0x14,0x02,0x00,…
l Main.c – объявите изображения шрифтовl Имя должно совпадать с использованным при его создании
l NewFont.c – измените имя в файле шрифта
MyNewFont
/////////////////// FONTS AND BITMAPS ///////////////////////// This font is located in internal flashextern const FONT_FLASH MyNewFont;
// This font must be stored in external flash memory installed on// Graphics PICTail Plus boardextern FONT_EXTERNAL externalfont;
MyNewFont;
externalfont;
ИЛИ
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 27
Использование Шрифта
Hello World!
x1,y1
HowAre
You?
x2,y2
int main(void){extern const FONT_FLASH myFont;XCHAR myString1[]=“Hello World!”;XCHAR myString2[]=“How are you?”;….SetFont((void*)&myFont);SetColor(BLUE);MoveTo(x1,y1); //move cursorOutText(myString1);SetColor(BRIGHTRED);SetFontOrientation(ORIENT_VER);OutTextXY(x2, y2, myString2);….}
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 28
Microchip GraphicsУровень примитивов – Изображения
и Иконки
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 29
ИзображенияDefinitionБитмарБитмар этоэто точечноеточечное представлениепредставление графическогографическогоизображенияизображения вв памятипамяти. . ЗначениеЗначение каждойкаждой точкиточкихранитьсяхраниться вв одномодном илиили несколькихнескольких битахбитах каккакопределеноопределено глубинойглубиной цветацвета илиили bppbpp (bits per pixel).(bits per pixel).
1 bpp 4 bpp 8 bpp 16 bpp
Определение:
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 30
Преобразование изображений
1) Выберите файлизображения “Add Images” ( только.bmp формат)
2) И нажмите“Convert”
3) Для хранения вовнешней памяти, сохраните в .hexфайле
4) Для внутреннейпамяти, сохранитев .c файле
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 31
Использование изображений(внутренняя память)
Добавьтеполученныефайлы кпроекту
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 32
extern const char L11298[] __attribute__((aligned(2)));//NAME CAN BE CHANGED HERE.const struct{short mem; const char* ptr;} mchpLogo ={0,L11298};const char L11298[] __attribute__((aligned(2))) ={0x00,0x00,0x20,0x00,0x7F,0x00,0x00,0x23,0x00,0x06,0x88,0x01,0x00,0x08,0xAB,0x01,0x00,0x0C,0xCE,0x01,0x00,0x0E,0x14,0x02,0x00,…
Использование Изображений
/////////////////// FONTS AND BITMAPS ///////////////////////// This font is located in internal flashextern const BITMAP_FLASH mchpLogo;
// This font must be stored in external flash memory installed on// Graphics PICTail Plus board extern BITMAP_EXTERNAL externalfont;
mchpLogo;
external_bitmap;
l Main.c – объявите ссылки на изображениеl Имя должно совпадать с использованным при создании
l NewIntro.c – измените имя в файле изображения
ИЛИ
mchpLogo =
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 33
Использование изображения
Предопределены следующиекоэффициенты масштаба:IMAGE_NORMALIMAGE_X2
int main(void){extern const BITMAP_FLASH image1;BYTE stretch = IMAGE_NORMAL;….X = GetMaxX()-GetImageWidth((void*)&image1);Y = GetMaxY()-GetImageHeight((void*)&image1);
//put bitmap in the centerPutImage((X >>1),(Y >> 1), &image1, stretch);….}
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 34
В Лабораторной Работе № 1 вынаучитесь
Создавать Экран-Заставку(применять картинки, шрифты, базовые фигуры)
Создавать Экран-Заставку(применять картинки, шрифты, базовые фигуры)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 35
Вы научитесь создавать вот такуюзаставку
Лабораторная работа 1Создание Экрана-Заставки
mchpLogo.bmp
Текст с выбраннымшрифтом
ПрямоугольникиОкружность
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 36
Microchip Graphics Создание виджетов (элементов
управления)
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 37
Примеры библиотечных элементовуправления
Picture
Meter
Chart
List Box
Buttons
CheckboxScroll Bar
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 38
Создание виджетов
l Каждый виджет имеет свою Create функциюl OBJ = сокращенное имя виджета
l Описано в файле помощиl Например: BtnCreate(,,,) создает кнопкуl Например: PbCreate(,,,) создает progress bar
l Можно создать несколько объектов одноготипа
ObjCreateObjCreate(,,)(,,) этоэто функцияфункция используемаяиспользуемая библиотекойбиблиотекой чтобычтобысоздатьсоздать виджетвиджет сс определеннымиопределенными параметрамипараметрами.. ЭтаЭта функцияфункцияавтоматическиавтоматически заполняетзаполняет структуруструктуру длядля негонего ии добавляетдобавляетвиджетвиджет вв глобальныйглобальный связанныйсвязанный списоксписок используемыхиспользуемыхвиджетоввиджетов. . ВозвращаетВозвращает указательуказатель нана созданныйсозданный обектобект..
Определение:
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 39
ID_OBJN
ID_OBJ1
…
ID_OBJ2
ID_OBJ3
Создание виджетов
l ObjCreate(,,,)l Заполняет структуруобъекта
lДобавляет к хвостусписка
l Требуется Heap
Связанный список
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 40
В коде приложения …l Пример: void CreateButtons(void){…
#define ID_BTN2 16……BtnCreate( ID_BTN2, // 2nd Button ID
x3, y3, // left, topx4, y4, // right, bottomRadius, // Rounded edgesBTN_DRAW, // Display button&arrow, // use this bitmapNULL, // no textaltScheme); // style scheme
…}
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 41
Создание ВиджетовОбщие параметры
l IDl Уникальный номер используемый для ссылок наобъект
l Положениеl Top, left, bottom, right задают положение
l Биты состоянияl Используются чтобы управлять виджетом
l Стильl Определяет вид объекта
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 42
Microchip Graphics Стили для виджетов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 43
Стили для виджетовDefinitionСтильСтиль этоэто структураструктура используемаяиспользуемая библиотекойбиблиотекой чтобычтобы задатьзадатьвидвид объектаобъекта назначивназначив цветацвета ии шрифтшрифт..
Определение:
l Несколько стилей могут быть созданыодновременно
l Стиль по умолчанию задан в GOL.hl GOLCreateScheme()
l Создает новый стильl Возвращает указатель на стиль
l Структура содержит 10 членовl Значения по умолчанию назначаются при созданииl Могут быть изменены напрямуюl Каждый виджет использует стиль по своему
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 44
Структура стиляПример для кнопки
Button
Button
Button
int main(void){…GOL_SCHEME *altScheme;altScheme = GOLCreateScheme();…altScheme -> EmbossDkColor = DKBLUE;altScheme -> EmbossLtColor = BLUE;altScheme -> TextColor0 = WHITE;altScheme -> TextColor1 = YELLOW;altScheme -> TextColorDisabled = GREY;altScheme -> Color0 = BRIGHTBLUE;altScheme -> Color1 = LTBLUE;altScheme -> ColorDisabled = LTTAN;altScheme -> CommonBkColor = TAN;altScheme -> pFont = GOLFontDefault;…}
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 45
Microchip Graphics Рисование виджетов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 46
Рисование виджетов
l GOLDraw()l Нет входных параметровl Просматривает связанныйсписок
l Проверяет биты состоянияl Если бит прорисовкиустановлен то выводит наэкран
l Возвращает TRUE когда всевиджеты прорисованны
ID_OBJ1 -> биты состояния
…
ID_OBJ2 -> биты состояния
ID_OBJ3 -> биты сосояния
ID_OBJN -> биты состояния
Связанный список
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 47
state общие поляl Биты состояния для рисования:
l 6 старших бита показывают что объект…l Невидимl Должен быть перерисован частичноl Полностью перерисован
l Используются всеми виджетами:l OBJ_HIDE
l Закрашивает область виджета CommonBkGnd цветомl OBJ_DRAW
l Перерисовывает виджет целикомl Очищается автоматически менеджером рисованияGOLDraw()
l OBJ_DRAW_FOCUS: l Перерисовывает только фокус
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 48
l Биты состояния определяющие свойства: l 10 младших битовl Определяют реакцию на сообщения и видl Не изменяются автоматически GOLDraw()
l Используется некоторыми виджетами:l OBJ_FOCUSED: виджет в фокусе
l Используется всеми виджетами:l OBJ_DISABLED: виджет выключен
l Все сообщения будут игнорироваться
state общие биты
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 49
Макросы для управления битамисостояния
l SetState(pObj, state)l ClrState(pObj, state)l GetState(pObj, state)l GOLFindObject(ID)lWhere…l pObj = указатель на виджетl state = ИЛИ комбинация битов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 50
Биты состоянияПример
Text
Text
Text
Text
if (GOL_DRAW()){// Example Button text alignmentsSetState(pBtn, BTN_TEXTTOP);SetState(pBtn, BTN_TEXTRIGHT);
// Example Button FocusSetState(pBtn, BTN_FOCUSED);
// Example Button ActionSetState(pBtn, BTN_DISABLED);state = BTN_PRESSED|BTN_TEXTTOP|BTN_TEXTLEFT;SetState(pBtn, state);
// Example Hiding ButtonSetState(pBtn, BTN_HIDE)}
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 51
Пример рисованияТипичное приложение
Инициализирует графику исоздает стиль используемыйпо умолчанию GOLInit()
Создание альтернативного стиля*alt = GolCreateScheme()
Создание объектовObjCreate(,,)
РисованиеобъектовGOLDraw()
main()
* Этот шаг может быть пропущен если используются цветапо умолчанию
GOLInit() запускаетInitGraph() иGOLCreateScheme().
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 52
Использование виджетов
•Добавьте необходимыефайлы в проект:
•GOL.c
•Primitive.c
•widget.c
•DisplayDriver.c
•GOL.h
•Graphics.h
•GenericTypeDefs.h
•Primitives.h
•widget.h
•DisplayDriver.h
•GraphicsConfig.h
•Plus Font and Bitmap files
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 53
Использование виджетов
#define USE_GOL#define USE_BUTTON // Enable Button Object.//#define USE_WINDOW // Enable Window Object.//#define USE_CHECKBOX // Enable Checkbox Object.//#define USE_RADIOBUTTON // Enable Radio Button Object.//#define USE_EDITBOX // Enable Edit Box Object.//#define USE_LISTBOX // Enable List Box Object.//#define USE_SLIDER // Enable Slider or Scroll Bar Object.//#define USE_PROGRESSBAR // Enable Progress Bar Object.#define USE_STATICTEXT // Enable Static Text Object.//#define USE_PICTURE // Enable Picture Object.//#define USE_GROUPBOX // Enable Group Box Object.//#define USE_ROUNDDIAL // Enable Dial Object.//#define USE_METER // Enable Meter Object.//#define USE_GRID // Enable Grid Object.//#define USE_CHART // Enable Chart Object//#define USE_CUSTOM // Enable Custom Control Object
l Разрешите нужные виджеты вGraphicsConfig.h
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 54
В Лабораторной Работе № 2 вынаучитесь:
Создавать простое меню дляприложения
Создавать простое меню дляприложения
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 55
Вы научитесь создаватьвот такое простое меню
Лабораторная работа 2Создание меню
Кнопка с текстом
Кнопка с картинкой
Статическийтекст с рамкой
Статический текст
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 56
Интерфейс с пользователемИнтерфейс сообщений
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 57
Интерфейс сообщений
l Упрощает интеграцию устройств вводаl Позволяет эффективно управлятьвиджетами
l В будущем будет добавлена поддержкадругих устройств ввода (e.g., mouse)
Интерфейс сообщений
ФФ--цияция рисованиярисования 11(i.e. 3D (i.e. 3D КнопкаКнопка))
ФФ--цияция рисованиярисования 22(i.e. Progress Bar)(i.e. Progress Bar)
ФФ--цияция рисованиярисования NN
Приложение
Уровень графических объектов
……
Клавиатура Touch панельКнопки
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 58
Интерфейс с устройством вводаl Получить событие от пользователя
l Пример драйвера для touch панели включен вбиблиотеку
l Заполнить структуру сообщенияl Вызвать GOLMsg(&msg)
l Где &msg адрес структуры сообщенияl GOLMsg(&msg) интерпретирует сообщениевызывает GOLMsgCallback(…) для обработкипользователем и обрабатывает сообщения поумолчанию
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 59
l Структура сообщения
typedef struct { BYTE type;BYTE uiEvent; SHORT param1; SHORT param2;} GOL_MSG;
l type = TYPE_KEYBOARD или TYPE_TOUCHSCREENl param1 и param2 зависят от типа
l Для touch панели:l param1: x координатаl param2: y координата
l Для клавиатуры:l param1: ID виджета получающего сообщениеl param2: зависит от события
Структура сообщения
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 60
Структура Сообщения
l uiEvent определяет тип событияl Для touch панели
l EVENT_PRESSl EVENT_RELEASEl EVENT_MOVEl EVENT_INVALID
l Не нажата
l Для клавиатуры и кнопокl EVENT_KEYSCAN
l Обычно скан кодl EVENT_CHARCODE (только edit box)
l param2 = код символаl EVENT_INVALID
l Не нажата
AT скан кодыописаны вфайле помощи.
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 61
Примерзаполнения сообщения для кнопки
if(S5){//button is pressedmsg->type = TYPE_KEYBOARD;msg->uiEvent = EVENT_KEYSCAN; msg->param1 = ID;msg->param2 = SCAN_CR_PRESSED;
}else{//button is releasedmsg->type = TYPE_KEYBOARD;msg->uiEvent = EVENT_KEYSCAN; msg->param1 = ID;msg->param2 = SCAN_CR_RELEASED;
}return;
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 62
Интерфейс с пользователемОбработка сообщений
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 63
Менеджер сообщений
l GOLMsg(&msg)
l Находит виджет которыйдолжен принять сообщение
l Транслирует сообщениеl Вызывает функциюGOLMsgCallback(…) дляобработки сообщенияпользователем
l Выполняет обработкусообщения по умолчанию
ID_OBJ1 -> Биты состояния
…
ID_OBJ2 -> Биты состояния
ID_OBJ3 -> Биты состояния
ID_OBJN -> Биты состояния
Связанный список
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 64
Обработка сообщения поумолчанию для кнопки
ButtonPressed?
ButtonReleased?
SetState(pB, BTN_PRESSED |
BTN_DRAW)
ClearState(pB, BTN_PRESSED)
SetState(pB, BTN_Draw)
Button
Button
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 65
Стандартное приложение
Инициализация графики исоздание стиля
используемого по умолчаниюGOLInit()
Создание альтернативный стиля*alt = GolCreateScheme()
Создание объектовObjCreate(,,)
Прорисовкаобъектов
if(GOLDraw())main()
* Можно пропустить этот шаг
ОбработкаGOLMsg(&msg)
Входное событие**Заполнение &msg
** Должна быть определена пользователем
GOLMsgCallback(,,,)**
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 66
Что такое Callback?DefinitionССallbackallback функцияфункция позволяетпозволяет нижнемунижнему уровнюуровню программыпрограммывызватьвызвать функциюфункцию определеннуюопределенную нана верхнемверхнем уровнеуровне..
Определение:
Программа
Библиотечная функция
CALLBACKфункция
Уровень приложения
Уровень графическихобъектов
Используется чтобы написать код обрабатывающийсобытие для виджета
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 67
GOLMsgCallback()
Программа
GOLMsg()
GOLMsgCallback()
Уровень приложения
Уровень графическихобъектов
Вызывается менеджером GOLMsg() Используется чтобы написать обработку сообщений
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 68
GOLMsgCallback()l Вызывается менеджером GOLMsg(&msg)l ДОЛЖНА быть определена в программеl В ней пользователь выполняет необходимыедействия:l Пример: Сменить картинку на кнопке когда она нажатаl Пример: включить LED когда кнопка нажата
l Входные параметры:l objMsg: транслированное сообщениеl pObj: указатель на виджетl pMsg: указатель на структуру сообщения
l Выход:l TRUE: Менеджер запустит обработку по умолчаниюl ‘0’ : Обработка по умолчанию будет пропущена
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 69
Функции для работы с виджетом
l Виджет имеющий текст:l ObjSetText(*pObj, *pText)l ObjGetText(*pObj)
l Виджет с изображением:l ObjSetBitmap(*pObj, *pBitmap) l ObjGetBitmap(*pObj)
l Специальные функции:l Примеры:l PbSetPos(*pObj) – увеличивает и уменьшает позициюдля progress bar
l MtrIncVal(*pObj), MtrDecVal(*pObj) – увеличивает иуменьшает позицию для стрелочного индикатора
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 70
DOWN
GOLMsgCallback()Пример
WORD GOLMsgCallback(objMsg,pObj,pMsg){…objID = GetObjID(pObj);pSldObj = (*SLIDER)GOLFindObj(SLD1);
if(objID == BTN1){if (objMsg == BTN_MSG_PRESSED){
BtnSetBitmap(pObj, &blueDOWNarrow);SetState(pBTN1, BTN_TEXTBOTTOM);SldDecPos(pSldObj);SetState(pSldObj, SLD_DRAW_THUMB);SlowMotor();}
else{BtnSetBitmap(pObj, NULL);ClrState(pObj, BTN_TEXTBOTTOM);}}
…}
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 71
Интерфейс с пользователемGOLDrawCallback()
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 72
GOLDrawCallback
Программа
GOLDraw()
GOLDrawCallback()
Уровень приложения
Уровень графическихобъектов
Вызывается менеджером рисования GOLDraw()
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 73
Customized DrawingGOLDrawCallback()
l Вызывается менеджером GOLDraw()l Прорисовка всех виджетов закончена
l ДОЛЖНА быть определена пользователемl Если возвращает TRUE то управление переходитобратно к менеджеру GOLDraw()
l Если возвращает ‘0’ пользователь не закончилрисование
l Здесь пользователь может рисоватьдополнительные элементы
l Единственное безопасное место чтобы:l Изменить параметры рисованияl Изменить или создать новый связанный списоквиджетов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 74
Создание экрана
l Используйте GOLFree() чтобы удалитьтекущий связанный списокl Удаляет все виджеты из heap памяти
l Используйте ObjCreate(,,,) чтобысформировать новый список
l Установите размер heap для экрана ссамым большим количеством виджетов
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 75
Стандартное приложение
Инициализация графики истиля по умолчанию
GOLInit()
Создание альтернативного стиля*alt = GolCreateScheme()
Создание объектовObjCreate(,,)
Прорисовка объектовGOLDraw()
main()
* Этот шаг может быть пропущен
Входное событие**Заполнение &msg
ОбработкаGOLMsg(&msg)
** Долны быть определены пользователем
GOLMsgCallback(,,,)**
GOLDrawCallback()**
© 2009 Microchip Technology Incorporated. All Rights Reserved. LCD Slide 76
В Лабораторной Работе № 3 вынаучитесь:
Обмену сообщениями между объектамибиблиотеки
Обмену сообщениями между объектамибиблиотеки
© 2009 Microcip Technology Incorporated. All Rights Reserved. 1341 GFX2 Slide 77
Вы научитесь обмениваться сообщениямимежду графическими объектами
Лабораторная работа 3Управление печкой
Start buttonToggle State SetChange text on press
Overlay Progress Baron top of Exit button
IncrementCount Decrement
Count
Edit Boxes
Static Text
Count down will not occur when “Start” is pushed. We implement this functionality later.
Recommended