реклама на сайте
подробности

 
 
> Помогите разобраться с ГУЯми.
zheka
сообщение Jul 25 2012, 07:34
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 072
Регистрация: 14-01-06
Пользователь №: 13 164



Господа требуется совет.
Осваиваю STM32F. Есть платка китайская - MINI-STM32 V3.0. С дисплеем на контролере ILI9230. Когда она приехала, на ней была установлена демка от Micrium. А на прилагаемом диске исходников не оказалось. На мой вопрос о библиотеках распространитель ответил: "Хрен...".

Порыскал я в интернете в поисках ГУЕв. Набрел на страницу http://makesystem.net/?p=457.

Красота, да все платное.
Да и в структуру всего этого я не въехал из-за отсутствия опыта, наверное.
В описаниях указаны типы дисплеев, типы платформ и типы камней, с которыми эти библиотеки совместимы, однако в исходниках я так и не нашел участков кода, отвечающих за низкоуровневую работу с дислпеями. Ну или хотя бы шаблоны, куда можно дописать эти функции под конкретный дисплей... В прилагающихс примерах есть файлы проектов под Visual C.... Можно ли это как-то пересобрать под KEIL - непонятно... Да и обещанные конструкторы форм я нашел только в одном из этих ГУЕв. В общем, в обилии информации я вчера утонул..

Порекомендуйте пожалуйста какие-нибудь бесплатные библиотеки, если таковые имеются, которые можно без труда запустить в связке KEIL+STM32F+ILI9230 (контроллер дисплея).
Чисто внешне из перечисленного в ссылке мне конечно понравился PEG Pro, но он, гад, платный.

Сообщение отредактировал zheka - Jul 25 2012, 07:37
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jt777
сообщение Oct 24 2012, 06:50
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 18-09-07
Из: Украина
Пользователь №: 30 612



>можно ли виджет, написанный "по мотивам" исходников 3.98 заставить работать с предкомпиленной версией emWIN из Кейла (4.16 кажется сейчас)
Не могу ответить на этот вопрос т.к не пробовал. Что касается самописного виджета то я довольствовался написанием собственной функции для отрисовки виджета. Код привожу ниже.

CODE


/*********************************************************************
*
* CallBackBut.c
*
*/
#include "GUI.h"
#include "WM.h"
#include "FRAMEWIN.h"
#include "BUTTON.h"
#include "BUTTON_Private.h"
#include "GUI_Protected.h"
#include "mystyle.h"

/*********************************************************************
*
* Defines
*
*/
#define Style_Dark_Blue 1
#define Style_Dark_Blue_1 1+1
#define Style_Light_Blue 3
#define Style_Light_Blue_1 3+1
#define Style_Silver 5
#define Style_Silver_1 5+1
#define Style_Yellow 7
#define Style_Yellow_1 7+1
#define Style_Red 9
#define Style_Red_1 9+1
#define Style_Green 11
#define Style_Green_1 11+1

#define BUTTON_FLASHING_ENABLE WIDGET_STATE_USER1
#define BUTTON_FLASHING_UP WIDGET_STATE_USER2




/*********************************************************************
*
* GetColorPalette
*
*/

static t_2Colors GetColorPalette(int _Style)
{
t_2Colors RetPalette;
switch (_Style)
{
case Style_Dark_Blue:
case Style_Dark_Blue_1:
RetPalette.Col_1=0xFFD192;
RetPalette.Col_2=0xFFB146;
break;
case Style_Light_Blue:
case Style_Light_Blue_1:
RetPalette.Col_1=0xFFF4E5;
RetPalette.Col_2=0xFFE8C9;
break;

case Style_Silver:
case Style_Silver_1:
RetPalette.Col_1=0xECECEC;
RetPalette.Col_2=0xCECECE;
break;

case Style_Yellow:
RetPalette.Col_1=0x86CDE8;
RetPalette.Col_2=0x22C0F1;
break;
case Style_Yellow_1:
RetPalette.Col_2=0x86CDE8;
RetPalette.Col_1=0x22C0F1;
break;
case Style_Red:
RetPalette.Col_1=0x0000ff;
RetPalette.Col_2=0x0000D9;
break;
case Style_Red_1:
RetPalette.Col_2=0x0000ff;
RetPalette.Col_1=0x0000D9;
break;
case Style_Green:
RetPalette.Col_1=0x3Dff3D;
RetPalette.Col_2=0x00D600;
break;
case Style_Green_1:
RetPalette.Col_2=0x3Dff3D;
RetPalette.Col_1=0x00D600;
default: // серый
RetPalette.Col_1=0xEAEAEA;
RetPalette.Col_1=0xEAEAEA;
break;
}
return RetPalette;
}

/*********************************************************************
*
* _WIDGET_EFFECT_3D_DrawDownRec
*
*/

static void _WIDGET_EFFECT_3D_DrawDownRect(const GUI_RECT* pRect) {
GUI_RECT r;
r = *pRect;
LCD_SetColor(0x0); /* TBD: Use halftone */
GUI_DrawHLine(r.y0, r.x0, r.x1);
GUI_DrawVLine(r.x0, r.y0 + 1, r.y1);
GUI_DrawHLine(r.y1, r.x0 + 1, r.x1);
GUI_DrawVLine(r.x1, r.y0 + 1, r.y1);
}

/*********************************************************************
*
* _WIDGET_EFFECT_3D_DrawDown
*
*/

static void _WIDGET_EFFECT_3D_DrawDown(void) {
GUI_RECT r;
WM_GetClientRect(&r);
_WIDGET_EFFECT_3D_DrawDownRect(&r);
}



/*********************************************************************
*
* _OnPaint_1
*
*/

#ifndef BUTTON_BKCOLOR0_DEFAULT
#define BUTTON_BKCOLOR0_DEFAULT 0xAAAAAA
#endif

static void _OnPaint(BUTTON_Handle hObj, int _Style,int Effect)
{
int Index;
const char* s = 0;
GUI_RECT Rect,rInside;
GUI_RECT Rect1;
GUI_RECT Rect2;
t_2Colors Palette;
int height;
BUTTON_Obj * pObj;
GUI_MEMDEV_Handle hMem;
pObj = BUTTON_H2P(hObj);
Index = (WIDGET_GetState(hObj) & BUTTON_STATE_PRESSED) ? 1 : 0;
WM_GetClientRect(&Rect);
if (pObj->hpText) {
s = (const char*) GUI_ALLOC_h2p(pObj->hpText);
}
Palette=GetColorPalette(_Style);

rInside=Rect;
Rect1=Rect;
height=Rect1.y1-Rect1.y0;
Rect1.y1=Rect1.y1-height/2;
Rect2=Rect;
Rect2.y0=Rect2.y0+height/2;


hMem=0;
if(hMem)
{
GUI_MEMDEV_Select(hMem);
}

WM_SetUserClipRect(&rInside);
if(WM__IsEnabled(hObj)) // Если кнопка включена
{
if(Index==0)// кнопка отжата
{
if ((pObj->Widget.State & BUTTON_FLASHING_ENABLE))
{
if ((pObj->Widget.State & BUTTON_FLASHING_UP))
{
Palette=GetColorPalette(_Style+1);
}
else
{
Palette=GetColorPalette(_Style);
}
}

GUI_SetColor(Palette.Col_1);
GUI_FillRect(Rect1.x0,Rect1.y0,Rect1.x1,Rect1.y1);
GUI_SetColor(Palette.Col_2);
GUI_FillRect(Rect2.x0,Rect2.y0,Rect2.x1,Rect2.y1);
}
else
{
GUI_SetColor(Palette.Col_2);
GUI_FillRect(Rect1.x0,Rect1.y0,Rect1.x1,Rect1.y1);
GUI_SetColor(Palette.Col_1);
GUI_FillRect(Rect2.x0,Rect2.y0,Rect2.x1,Rect2.y1);
}
if(_getbitL(Effect,__BORDER_DISABLE)==1)
{
if(Index==0)
{
WIDGET_EFFECT_3D_DrawUp();
}
else
{
_WIDGET_EFFECT_3D_DrawDown();
}
}
}
else
{
GUI_SetColor(BUTTON_BKCOLOR0_DEFAULT);
GUI_FillRect(Rect.x0,Rect.y0,Rect.x1,Rect.y1);
WIDGET_EFFECT_3D_DrawUp();
}

if(_getbitH(Effect,__IS_FOCUS)==1)
{
GUI_RECT Focus;
Focus.x0=Rect2.x0+__LEFT_OFFSET;
Focus.y0=Rect2.y1-__BOTTOM_OFFSET-__SIZE_FOCUS_LINE ;
Focus.x1=Rect2.x1-__RIGHT_OFFSET;
Focus.y1=Rect2.y1-__BOTTOM_OFFSET;
if((Focus.x0>0)&&(Focus.y0>0)&&(Focus.x1>0)&&(Focus.y1>0) && (Focus.x0<Focus.x1)&&(Focus.y0<Focus.y1))
{
GUI_SetColor(GUI_YELLOW);
GUI_FillRect(Focus.x0,Focus.y0,Focus.x1,Focus.y1);
}

}


GUI_SetColor(BUTTON_GetTextColor(hObj, Index));
GUI_SetFont(BUTTON_GetFont(hObj));
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DispStringInRect(s, &rInside, pObj->Props.Align);
if(hMem)
{
GUI_MEMDEV_CopyToLCDAt(hMem, pObj->Widget.Win.Rect.x0,pObj->Widget.Win.Rect.y0);
GUI_MEMDEV_Delete(hMem);
}
WM_SetUserClipRect(0);
}


/*********************************************************************
*
* BUTTON_Callback_Dark_Blue
*
*/
void BUTTON_Callback_Dark_Blue(WM_MESSAGE *pMsg)
{
switch (pMsg->MsgId) {
case WM_PAINT:
_OnPaint(pMsg->hWin,Style_Dark_Blue,0); //<!!!!!!!!!!- самописная функция для отрисовки виджета
break;
default:
BUTTON_Callback(pMsg);
break;
}

}


далее в калбэк функции диалогового окна где используеться эта кнопка я подставляю свою калбэк функцию кнопки

CODE

static const GUI_WIDGET_CREATE_INFO _aDialogMainMenu[] = {
/* Function Text Id Px Py Dx Dy */
{ WINDOW_CreateIndirect, 0, 0, 0, 229, 480, 43,WM_CF_MEMDEV},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 0, 2, 0, 83, 38},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 1, 87, 0, 83, 38},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 2, 172, 0, 83, 38},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 3, 257, 0, 83, 38},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 4, 342, 0, 83, 38},
{ BUTTON_CreateIndirect, 0, GUI_ID_USER + 5, 427, 0, 50, 38}

};


static void _cbDialogMainMenu(WM_MESSAGE * pMsg) {
WM_HWIN hDlg, hItem;
hDlg = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(hDlg, GUI_ID_USER + 0); // получаю хэндл кнопки
WM_SetCallback(hItem, BUTTON_Callback_Dark_Blue); // устанавливаю свою калбэк функцию
break;

case WM_PAINT:
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (NCode) {
case WM_NOTIFICATION_CLICKED: break;

case WM_NOTIFICATION_RELEASED: break;
}
break;


default:
WM_DefaultProc(pMsg);
}
}

}



Эта функция вместо стандартной кнопки отрисовывает кнопку разделенную по горизонтали пополам разными оттенками заданного цвета(в данном случае синим). При нажатии на кнопку оттенки меняются местами. Ну примерно так))). Для более полной информации покопайтесь на сайте сегера. Там, если я не ошибаюсь, были примеры написания собственных калбэк функций)))
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- zheka   Помогите разобраться с ГУЯми.   Jul 25 2012, 07:34
- - AlexandrY   Цитата(zheka @ Jul 25 2012, 10:34) Пореко...   Jul 25 2012, 08:13
- - zheka   ucGUI я скачал. Структура папок в ней абсолютно ид...   Jul 25 2012, 08:41
- - aT-DeviLru   Исходные коды демки с ucGUI и uCOS-II (плюс куча д...   Jul 25 2012, 11:11
|- - AlexandrY   Цитата(aT-DeviLru @ Jul 25 2012, 14...   Jul 25 2012, 13:42
- - zheka   Скачал.... ПОпробовал запустить ucOS+ucGUI -видим...   Jul 25 2012, 15:43
|- - _Артём_   Цитата(zheka @ Jul 25 2012, 18:43) Что де...   Jul 25 2012, 15:47
|- - SeregaB   Цитата(zheka @ Jul 25 2012, 19:43) (у мен...   Jul 26 2012, 06:16
- - zheka   Да, зашивается. И запускается. ПРоект правда под V...   Jul 25 2012, 17:05
|- - _Артём_   Цитата(zheka @ Jul 25 2012, 20:05) ПРоект...   Jul 25 2012, 17:28
- - zheka   Артем, спасибо, информация по ссылке помогла. Все ...   Jul 25 2012, 17:47
- - grand1987   .. можете попробовать GUI от ST Microelectronics. ...   Jul 25 2012, 19:45
- - kan35   Я в это теме http://electronix.ru/forum/index.php?...   Jul 26 2012, 06:06
|- - zheka   Цитата(kan35 @ Jul 26 2012, 10:06) Я в эт...   Jul 26 2012, 13:50
- - zheka   Чертовы китайцы... они не предусмотрели в разводке...   Jul 27 2012, 02:37
- - kan35   Я скачал схему на вашу пату отсюда https://sites.g...   Jul 27 2012, 04:45
- - zheka   kan35, я тоже эту схему откуда-то скачивал. Вы гд...   Jul 27 2012, 14:50
- - kan35   Ну у меня есть опыт же:-) SPI на дисплее отдельный...   Jul 27 2012, 15:49
- - zheka   Вот тема http://electronix.ru/forum/index.php?sho...   Jul 27 2012, 18:46
- - kan35   В опциях компилятора убрать строку $PROJ_DIR...   Jul 28 2012, 04:35
|- - kan35   Цитата(kan35 @ Jul 28 2012, 08:35) включи...   Jul 28 2012, 17:57
- - zheka   Цитата$PROJ_DIR$\Files\Librari...   Jul 28 2012, 07:24
- - zheka   Блин, я включил "Use CMSIS" !!...   Jul 28 2012, 18:18
- - zheka   А fps при использовании SPI меряли?   Jul 29 2012, 18:13
- - kan35   Тонкости перехода:-) с 5 на 6 иар Я попробовал у с...   Jul 30 2012, 04:21
- - zheka   Цитата830кпикс/с Ниче так... У меня 120 кпикс/с.....   Jul 30 2012, 12:52
- - zheka   ЦитатаДля окон - выше крыши. Окошки - это хорошо. ...   Jul 30 2012, 14:57
- - kan35   Piter-C6 Вообще говоря GUI сама занимается за под...   Jul 31 2012, 04:30
- - zheka   kan35, все лучше и лучше! В проекте, что вы в...   Jul 31 2012, 15:33
|- - kan35   Цитата(zheka @ Jul 31 2012, 19:33) kan35,...   Aug 2 2012, 05:23
- - loreal1970   Ребята, каой пароль на этот архив.? Вставлял цифры...   Jul 31 2012, 17:13
- - zheka   stm32stm32 пароль   Jul 31 2012, 17:39
- - loreal1970   Сенкс! догадался, но поздно. Пора на море.   Jul 31 2012, 19:30
- - zheka   Скомпилировалось. Я просто увлекся и удалил файл т...   Aug 2 2012, 14:38
- - zheka   Возвращаясь к SPI - вот даташит на дисплей - в упо...   Aug 4 2012, 07:20
- - AndreyKar   Последние два года работал выдирая нужный исходный...   Aug 23 2012, 15:06
- - PanovAU   emWin смог прикрутить от NXP. Они ее бесплатно рас...   Sep 10 2012, 17:21
- - jt777   Всем доброго времени суток. Я использую графику от...   Sep 11 2012, 07:03
|- - бомж   Цитата(jt777 @ Sep 11 2012, 09:03) Если н...   Oct 18 2012, 09:41
- - MEXAHuK   Добрый день! Тоже приобрел плату Mini-STM32-V...   Sep 21 2012, 08:20
- - MEXAHuK   Извиняюсь, опечатался в предыдущем сообщении. Надо...   Sep 21 2012, 12:13
- - khach   Подскажите пожалуйста, мне в предкомпиленном emWIN...   Oct 13 2012, 23:44
- - jt777   Выкладываю две версии 3.9 и 3.98. В версии 3.98 не...   Oct 22 2012, 06:11
- - khach   Спасибо, наконец все лежит в одном месте. А во пов...   Oct 22 2012, 08:53
- - бомж   Спасибо большое!   Nov 7 2012, 21:03
- - flopix   Есть у кого то пример как прикрутить этот GUI к св...   Aug 10 2013, 05:29


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 30th July 2025 - 17:05
Рейтинг@Mail.ru


Страница сгенерированна за 0.01348 секунд с 7
ELECTRONIX ©2004-2016