|
本帖最后由 hpdell 于 2018-5-9 10:36 编辑
请教下,使用 LISTWHEEL 控件不能够实现数据更新 ?
按下上图中的 OK 按钮后,显示在右边的数据没有跟新 ???????
程序如下:
//日期结构体
typedef struct
{
char year[5];
char month[20];
char day[5];
}DateStruct;
DateStruct datedemo={"2018", "五月", "08"}; //日期,默认初始化为2018年05月08日
u8 listwheelindex[3]; //LISTWHEEL选中的项目号
//年
const char *_apYear[]=
{
"1990", "1991", "1992", "1993", "1994", "1995", "1996", "1997", "1998", "1999",
"2000", "2001", "2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009",
"2010", "2011", "2012", "2013", "2014", "2015", "2016", "2017", "2018", "2019",
"2020", "2021", "2022", "2023", "2024", "2025", "2026", "2027", "2028", "2029",
"2030", "2031", "2032", "2033", "2034", "2035", "2036", "2037", "2038", "2039",
"2040", "2041", "2042", "2043", "2044", "2045", "2046", "2047", "2048", "2049",
"2050", "2051", "2052", "2053", "2054", "2055", "2056", "2057", "2058", "2059",
"2060", "2061", "2062", "2063", "2064", "2065", "2066", "2067", "2068", "2069",
"2070", "2071", "2072", "2073", "2074", "2075", "2076", "2077", "2078", "2079",
"2080", "2081", "2082", "2083", "2084", "2085", "2086", "2087", "2088", "2089",
"2090", "2091", "2092", "2093", "2094", "2095", "2096", "2097", "2098", "2099",
};
const char *_apMonth_CN[]=
{
"一月", "二月", "三月", "四月",
"五月", "六月", "七月", "八月",
"九月", "十月", "十一月", "十二月",
};
//日
const char *_apDay[]=
{
"01", "02", "03", "04", "05", "06",
"07", "08", "09", "10", "11", "12",
"13", "14", "15", "16", "17", "18",
"19", "20", "21", "22", "23", "24",
"25", "26", "27", "28", "29", "30",
"31",
};
// ID 号自定义
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_TEXT_0 (GUI_ID_USER + 0x02)
#define ID_TEXT_1 (GUI_ID_USER + 0x03)
#define ID_TEXT_2 (GUI_ID_USER + 0x04)
#define ID_TEXT_3 (GUI_ID_USER + 0x05)
#define ID_LISTWHEEL_0 (GUI_ID_USER + 0x06)
#define ID_LISTWHEEL_1 (GUI_ID_USER + 0x07)
#define ID_LISTWHEEL_2 (GUI_ID_USER + 0x08)
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ FRAMEWIN_CreateIndirect, "ListWheel sample", 0, 0, 0, 1024, 600, 0},
{ BUTTON_CreateIndirect, "Button", ID_BUTTON_0, 192, 150, 100, 40, 0, 0x0, 0 },
{ TEXT_CreateIndirect, " year month day", ID_TEXT_3, 12, 5, 156, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_0, 190, 40, 51, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_1, 190, 60, 66, 20, 0, 0x64, 0 },
{ TEXT_CreateIndirect, "Text", ID_TEXT_2, 190, 80, 53, 20, 0, 0x64, 0 },
{ LISTWHEEL_CreateIndirect, "Listwheel", ID_LISTWHEEL_0, 10, 30, 50, 150, 0, 0x0, 0 },
{ LISTWHEEL_CreateIndirect, "Listwheel", ID_LISTWHEEL_1, 60, 30, 80, 150, 0, 0x0, 0 },
{ LISTWHEEL_CreateIndirect, "Listwheel", ID_LISTWHEEL_2, 140, 30, 30, 150, 0, 0x0, 0 },
};
//在LISTWHEEL0上绘制红色指示行
static int ListWheel0_OwnerDraw(const WIDGET_ITEM_DRAW_INFO *pDrawItemInfo)
{
switch(pDrawItemInfo->Cmd)
{
case WIDGET_ITEM_DRAW_OVERLAY:
GUI_SetColor(GUI_BLUE);
GUI_DrawHLine(60,0,50);
GUI_DrawHLine(90,0,50);
break;
default:
return LISTWHEEL_OwnerDraw(pDrawItemInfo);
}
return 0;
}
//在LISTWHEEL1上绘制红色指示行
static int ListWheel1_OwnerDraw(const WIDGET_ITEM_DRAW_INFO *pDrawItemInfo)
{
switch(pDrawItemInfo->Cmd)
{
case WIDGET_ITEM_DRAW_OVERLAY:
GUI_SetColor(GUI_BLUE);
GUI_DrawHLine(60,0,80);
GUI_DrawHLine(90,0,80);
break;
default:
return LISTWHEEL_OwnerDraw(pDrawItemInfo);
}
return 0;
}
//在LISTWHEEL2上绘制红色指示行
static int ListWheel2_OwnerDraw(const WIDGET_ITEM_DRAW_INFO *pDrawItemInfo)
{
switch(pDrawItemInfo->Cmd)
{
case WIDGET_ITEM_DRAW_OVERLAY:
GUI_SetColor(GUI_BLUE);
GUI_DrawHLine(60,0,30);
GUI_DrawHLine(90,0,30);
break;
default:
return LISTWHEEL_OwnerDraw(pDrawItemInfo);
}
return 0;
}
//对话框回调函数
static void _cbDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
int NCode;
int Id;
static u8 LineHeight=30;
u8 i=0;
switch (pMsg->MsgId)
{
case WM_PAINT:
{
GUI_DrawGradientV(172,10,175,200,GUI_RED,GUI_BLUE); //绘制垂直梯度填充矩形
GUI_SetColor(GUI_WHITE); //设置为白色
GUI_SetFont(&GUI_FontHZ16 ); //设置字体 GUI_Font16B_ASCII
// 显示初值及更新显示
GUI_DispStringAt(datedemo.year,230,40); //显示年 更新显示没有反应 ??????????????
GUI_DispStringAt(datedemo.month,230,60); //显示月 更新显示没有反应 ??????????????
GUI_DispStringAt(datedemo.day,230,80); //显示日 更新显示没有反应 ??????????????
printf("%s年%s月%s日\n", datedemo.year,datedemo.month,datedemo.day); // 使用串口输出,调节后的数据是正确的
break;
case WM_INIT_DIALOG:
//初始化FRAMWIN
hItem = pMsg->hWin;
FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
FRAMEWIN_SetTextColor(hItem,GUI_YELLOW);
FRAMEWIN_SetText(hItem, "hpdell ListWheel");
_hFrame = hItem;
//重绘客户区颜色
FRAMEWIN_SetClientColor(_hFrame, GUI_GRAY_AA ); //GUI_GRAY_50 按下 "OK" , "Cancel" 后
//进行颜色改变测试
//初始化LISTWHEEL
for(i=0;i<3;i++)
{
hItem=WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_0+i);
LISTWHEEL_SetFont(hItem,&GUI_Font16B_ASCII ); //设置字体 GUI_FontComic18B_ASCII
LISTWHEEL_SetTextAlign(hItem,GUI_TA_VCENTER|GUI_TA_HCENTER);//对齐方式
LISTWHEEL_SetSnapPosition(hItem,(150-LineHeight)/2); //设置吸附的位置
LISTWHEEL_SetLineHeight(hItem,LineHeight); //设置绘制数据项所使用的行高
LISTWHEEL_SetTextColor(hItem,LISTWHEEL_CI_SEL,0xEE8822); //设置选中的条目的文本颜色
}
//设置Year的LISTWHEEL
hItem=WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_0);
LISTWHEEL_SetOwnerDraw(hItem,ListWheel0_OwnerDraw); //绘制红色指示行
for(i=0;i<GUI_COUNTOF(_apYear);i++) //添加数据项
{
LISTWHEEL_AddString(hItem,*(_apYear+i));
}
//设置Month的LISTWHEEL
hItem=WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_1);
LISTWHEEL_SetOwnerDraw(hItem,ListWheel1_OwnerDraw); //绘制红色指示行
LISTWHEEL_SetFont(hItem,&GUI_FontHZ16); //设置字体
for(i=0;i<GUI_COUNTOF(_apMonth_CN);i++) //添加数据项
{
LISTWHEEL_AddString(hItem,*(_apMonth_CN+i));
}
//设置Day的LISTWHEEL
hItem=WM_GetDialogItem(pMsg->hWin, ID_LISTWHEEL_2);
LISTWHEEL_SetOwnerDraw(hItem,ListWheel2_OwnerDraw); //绘制红色指示行
for(i=0;i<GUI_COUNTOF(_apDay);i++) //添加数据项
{
LISTWHEEL_AddString(hItem,*(_apDay+i));
}
//初始化BUTTON
hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_0);
BUTTON_SetFont(hItem, GUI_FONT_COMIC18B_1);
BUTTON_SetText(hItem, "OK");
//初始化TEXT
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0);
TEXT_SetFont(hItem, &GUI_FontHZ16);
TEXT_SetText(hItem, "年:");
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_1);
TEXT_SetFont(hItem, &GUI_FontHZ16);
TEXT_SetText(hItem, "月:");
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_2);
TEXT_SetFont(hItem, &GUI_FontHZ16);
TEXT_SetText(hItem, "日:");
hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_3);
TEXT_SetTextColor(hItem, GUI_BLUE);
TEXT_SetFont(hItem, &GUI_Font16B_ASCII);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id)
{
case ID_BUTTON_0:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
WM_InvalidateWindow(pMsg->hWin); //FRAMEWIN窗口无效,跟新显示
break;
}
break;
case ID_LISTWHEEL_0:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:
hItem=WM_GetDialogItem(pMsg->hWin,ID_LISTWHEEL_0);
listwheelindex[0]=LISTWHEEL_GetPos(hItem); //获取当前所选数据项的索引
//注意:LISTWHEEL_GetPos()只是获取到滚轮停下来所选中的那个项目编号,但是此时并没有选中这个
//项目,必须调用LISTWHEEL_SetSel()来选中这个项目。
LISTWHEEL_SetSel(hItem,listwheelindex[0]); //设置当前所选数据项,
LISTWHEEL_GetItemText(hItem,listwheelindex[0],datedemo.year,5);//获取所选中的项目的文本
printf("datedemo.year = %s\n", datedemo.year);
break;
}
break;
case ID_LISTWHEEL_1:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:
hItem=WM_GetDialogItem(pMsg->hWin,ID_LISTWHEEL_1);
listwheelindex[1]=LISTWHEEL_GetPos(hItem); //获取当前所选数据项的索引
LISTWHEEL_SetSel(hItem,listwheelindex[1]); //设置当前所选数据项
LISTWHEEL_GetItemText(hItem,listwheelindex[1],datedemo.month,20);//获取所选中的项目的文本
printf("datedemo.month = %s\n", datedemo.month);
break;
}
break;
case ID_LISTWHEEL_2:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:
hItem=WM_GetDialogItem(pMsg->hWin,ID_LISTWHEEL_2);
listwheelindex[2]=LISTWHEEL_GetPos(hItem); //获取当前所选数据项的索引
LISTWHEEL_SetSel(hItem,listwheelindex[2]); //设置当前所选数据项
LISTWHEEL_GetItemText(hItem,listwheelindex[2],datedemo.day,5);//获取所选中的项目的文本
printf("datedemo.day = %s\n", datedemo.day);
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
//背景窗口的回调函数
static void _BkCallback(WM_MESSAGE *pMsg) //3桌面窗口的回调函数
{
/*
switch (pMsg->MsgId) {
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_YELLOW);
GUI_SetFont(&GUI_Font32B_ASCII);
GUI_DispStringAt("HPDELL LISTWHEEL DEMO",0,0);
printf("ccc ==\n");
break;
default:
WM_DefaultProc(pMsg);
}
*/
}
/*
*********************************************************************************************************
* 函 数 名: CreateFramewin
* 功能说明: 创建对话框
* 形 参: 无
* 返 回 值: 返回对话框句柄
*********************************************************************************************************
*/
WM_HWIN CreateFramewin(void)
{
WM_HWIN hWin;
hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
return hWin;
}
void MainTask(void)
{
static U8 cc = 0;
if(!cc)
{
cc=1;
WM_MULTIBUF_Enable(1);
/* 窗口自动使用存储设备 */
WM_SetCreateFlags(WM_CF_MEMDEV);
/* 显示游标 */
GUI_CURSOR_Show();
WM_SetCallback(WM_HBKWIN,_BkCallback); //设置背景窗口回调函数
CreateFramewin();
}
}
|
|