|
1、实验设备:X3开发板 + 7英寸TFT屏(RA8875)
2、实验内容:实例66期-智能家居
3、问题:成功将V5实例66期移植到X3学习板上,想进行小改动,在开机完成后,图标背影(白色)默认 到第一个,但实例中必须通过按键K3来完成图标背影的显示(执行的是WM_SetFocus(hWinICON)函数),把这个函数放到MainTask 主循环中,屏幕不显示,出错,又对比了ST官方例程(WIDGET_iconView),WM_SetFocus(hWinICON)是放在主循环中,想了很久也没出是什么原因,请大家帮忙分析一下。(本人采用的是FreeRTOS 系统,定时20ms 调GUI_Exec();函数)
万分感谢!
X3的程序如下(MainTask):
void MainTask (void)
{
int uiCycTimes;
GUI_Init(); /* 初始化并创建对话框 */
WM_SetCreateFlags(WM_CF_MEMDEV);
//
//FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
//PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);/* 设置皮肤上 */
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
//
GUI_UC_SetEncodeUTF8(); /* 使能UTF-8解码用于汉字显示 */
hWinMain = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
//
/*在指定位置创建指定尺寸的ICONVIEW 小工具*/
hWinICON = ICONVIEW_CreateEx(20, /* 小工具的最左像素(在父坐标中)*/
45, /* 小工具的最上像素(在父坐标中)*/
440, /* 小工具的水平尺寸(单位:像素)*/
200, /* 小工具的垂直尺寸(单位:像素)*/
hWinMain, /* 父窗口的句柄。如果为0 ,则新小工具将成为桌面(顶级窗口)的子窗口 */
WM_CF_SHOW | WM_CF_HASTRANS, /* 窗口创建标记。为使小工具立即可见,通常使用 WM_CF_SHOW */
0,//ICONVIEW_CF_AUTOSCROLLBAR_V, /* 默认是0,如果不够现实可设置增减垂直滚动条 */
GUI_ID_ICONVIEW0, /* 小工具的窗口ID */
82, /* 图标的水平尺寸 */
80);/* 图标的垂直尺寸 */
/* 向ICONVIEW 小工具添加新图标 */
for (uiCycTimes = 0; uiCycTimes < GUI_COUNTOF(_aBitmapItem); uiCycTimes++)
{
ICONVIEW_AddBitmapItem(hWinICON, _aBitmapItem[uiCycTimes].pBitmap, _aBitmapItem[uiCycTimes].pText);
}
/* 设置小工具的背景色 32 位颜色值的前8 位可用于alpha混合处理效果*/
ICONVIEW_SetBkColor(hWinICON, ICONVIEW_CI_SEL, GUI_WHITE | 0xC0000000);
ICONVIEW_SetTextColor(hWinICON, ICONVIEW_CI_SEL,GUI_RED); // 在选中情况下,让图标中文字体显示红色
//
/* 设置字体 */
ICONVIEW_SetFont(hWinICON, &GUI_FontYahei);
/* 设置图标在x 或y 方向上的间距。*/
ICONVIEW_SetSpace(hWinICON, GUI_COORD_Y, 10);
/* 设置对齐方式 在5.22版本中最新加入的 */
ICONVIEW_SetIconAlign(hWinICON, ICONVIEW_IA_HCENTER|ICONVIEW_IA_TOP);
// WM_CreateTimer(WM_GetClientWindow(hWinMain), /* 接受信息的窗口的句柄 */
// ID_TimerTime, /* 用户定义的Id。如果不对同一窗口使用多个定时器,此值可以设置为零。 */
// 20, /* 周期,此周期过后指定窗口应收到消息*/
// 0); /* 留待将来使用,应为0 */
WM_SetFocus(hWinICON); // 加了这句后系统不正常 ??????????疑问
while(1)
{
//GUI_Delay(10);
}
}
ST 官方程序:
/*********************************************************************
*
* Public routines
*
**********************************************************************
*/
/*********************************************************************
*
* MainTask
*/
void MainTask(void);
void MainTask(void) {
GUI_FONT Font;
int i, Add, Sel, TimeNextInc;
WM_HWIN hWin, hText;
GUI_Init();
#if (!defined(WIN32))
if ((LCD_GetMirrorYEx(0) == 1) && (LCD_GetSwapXYEx(0) == 1) && (LCD_GetVXSizeEx(0) > LCD_GetXSizeEx(0))){
GUI_SetOrg(320, 0); /* Temporarilly required, will be solved in future */
}
#endif
WM_EnableMemdev(WM_HBKWIN);
WM_SetCallback(WM_HBKWIN, _cbWin);
/*
* Create title of sample
*/
hText = TEXT_CreateEx(0, 0, 320, 30, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_TEXT0, "emWin ICONVIEW sample");
TEXT_SetFont(hText, &GUI_Font24B_ASCII);
TEXT_SetTextAlign(hText, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetTextColor(hText, 0xFF4040);
/*
* Create explanation
*/
hText = TEXT_CreateEx(160, 40, 140, 100, WM_HBKWIN, WM_CF_SHOW, 0, GUI_ID_TEXT1, "");
GUI_SIF_CreateFont(_acFramed24B, &Font, GUI_SIF_TYPE_PROP_FRM);
TEXT_SetFont(hText, &Font);
TEXT_SetTextColor(hText, GUI_WHITE);
TEXT_SetWrapMode(hText, GUI_WRAPMODE_WORD);
TEXT_SetTextAlign(hText, GUI_TA_HCENTER | GUI_TA_VCENTER);
/*
* Create iconview widget
*/
hWin = ICONVIEW_CreateEx(10, 30, 125 + 11, 200,
WM_HBKWIN, WM_CF_SHOW | WM_CF_HASTRANS,
ICONVIEW_CF_AUTOSCROLLBAR_V, GUI_ID_ICONVIEW0, 55, 60);
for (i = 0; i < GUI_COUNTOF(_aBitmapItem); i++) {
/*
* Add icons to the widget
*/
ICONVIEW_AddBitmapItem(hWin, _aBitmapItem.pBitmap, _aBitmapItem.pText);
}
ICONVIEW_SetBkColor(hWin, ICONVIEW_CI_SEL, GUI_BLUE | 0xC0000000);
ICONVIEW_SetFont(hWin, &GUI_Font13B_ASCII);
WM_SetFocus(hWin); // 必须增加此命令,不然不显示图标背影。??
Add = 1;
Sel = 0;
TimeNextInc = GUI_GetTime() + 1000;
while (1) {
GUI_Delay(50);
WM_SendMessageNoPara(WM_HBKWIN, MSG_MOVE); /* Message for moving the toucan */
if (GUI_GetTime() >= TimeNextInc) {
TimeNextInc += 1000;
if (Sel == 0) {
Add = 1;
} else if (Sel == (GUI_COUNTOF(_aBitmapItem) - 1)) {
Add = -1;
}
Sel += Add;
ICONVIEW_SetSel(hWin, Sel);
}
}
}
/*************************** End of file ****************************/ |
|