|
问题如题,刷新显示的时候屏乱闪。感觉指针刷新和文本更新有冲突,还请各位大神帮忙分析一下原因。主要代码如下:
/*********************************************************************
*
* _aDialogCreate
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 800, 480, 0, 0x0, 0 },
{ PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_0, 363, 31, 20, 98, 1, 0x0, 0 },
{ PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_1, 416, 31, 20, 95, 1, 0x0, 0 },
{ TEXT_CreateIndirect, "Throtle", ID_TEXT_0, 346, 136, 54, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Speed", ID_TEXT_1, 140, 225, 146, 99, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "RPM", ID_TEXT_2, 520, 225, 155, 87, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Brake", ID_TEXT_3, 415, 135, 52, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Time", ID_TEXT_4, 365, 385, 80, 20, 0, 0x64, 0 },
// USER START (Optionally insert additional widgets)
// USER END
};
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialog(WM_MESSAGE * pMsg) {
WM_HWIN hItem;
// USER START (Optionally insert additional variables)
GUI_AUTODEV AutoDev; /* 内存设备 */
PARAM Param; /* PARAM类型变量 */
char TextSpeed[16];
char TextRpm[16];
static int t_Count0 = 0;// -a by Trun 20200311
static int t_Count1 = 0;// -a by Trun 20200311
static int t_Count2 = 0;// -a by Trun 20200311
static int t0 = 360; /* 用于三个指针的计数 */
static int t1 = 360;
static int t2 = 360;
static int Dir0 = 1;
static int Dir1 = 1;
// USER END
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_0);
PROGBAR_SetBarColor(hItem, 0, GUI_BLUE);
PROGBAR_SetBarColor(hItem, 1, GUI_ORANGE);
hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_1);
PROGBAR_SetBarColor(hItem, 0, GUI_BLUE);
PROGBAR_SetBarColor(hItem, 1, GUI_ORANGE);
//
// Initialization of 'Text'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
hText[0] = hItem;
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetFont(hItem, GUI_FONT_D24X32);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00C08080));
//
// Initialization of 'Text'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
hText[1] = hItem;
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetFont(hItem, GUI_FONT_D24X32);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00C08080));
//
// Initialization of 'Text'
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_4);
hText[2] = hItem;
TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetFont(hItem, GUI_FONT_8X16_1);
TEXT_SetTextColor(hItem, GUI_MAKE_COLOR(0x00C0C0C0));
// USER START (Optionally insert additional code for further widget initialization)
/* 使能抗锯齿 */
GUI_AA_EnableHiRes();
/* 设置抗锯齿因数 */
GUI_AA_SetFactor(MAG);
/* 创建自动设备对象 */
GUI_MEMDEV_CreateAuto(&AutoDev);
// USER END
break;
// USER START (Optionally insert additional message handling)
// USER END
/* 重绘消息 */
case WM_PAINT:
/* 第一个指针计数,用于旋转速度 */
t0-= 10;
if (t0< 0)
{
t0 = 36000;
}
/* 第二个指针计数,用于旋转速度 */
t1 -= 10;
if (t1 < 0)
{
t1 = 36000;
}
/* 旋转第一个指针 */
Param.Angle = t0;
Param.Angle *= 3.1415926f / 18000;
GUI_RotatePolygon(Param.aPoints, _aNeedle, countof(_aNeedle), Param.Angle);
/* 旋转第二个指针 */
Param.Angle1 = t1;
Param.Angle1 *= 3.1415926f / 18000;
GUI_RotatePolygon(Param.aPoints1, _aNeedle1, countof(_aNeedle1), Param.Angle1);
GUI_MEMDEV_DrawAuto(&AutoDev, &Param.AutoDevInfo, &_Draw, &Param);
//更新文本显示
sprintf((char*)TextSpeed, "%d", (t0 + 12000) / 100);
sprintf((char*)TextRpm, "%d", t1 / 100);
TEXT_SetText(hText[0], TextSpeed);
TEXT_SetText(hText[1], TextRpm);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
/*********************************************************************
*
* CreateWindow
*/
WM_HWIN CreateWindow(void);
WM_HWIN CreateWindow(void) {
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
/*
*********************************************************************************************************
* 函 数 名: MainTask
* 功能说明: GUI主函数
* 形 参:无
* 返 回 值: 无
*********************************************************************************************************
*/
void MainTask(void)
{
GUI_Init();
WM_MULTIBUF_Enable(1); //开启STemWin多缓冲,RGB屏可能会用到
while (1)
{
CreateWindow();
GUI_Delay(100);
}
}
|
-
|