|
在12864屏幕上创建了一个大于屏幕的列表,并绑定一个垂直滚动条,每屏显示四行,并响应实体按键消息。
如下:
case KEY_UP: SCROLLBAR_AddValue(Emv.scro,-4); break;
case KEY_DOWN: SCROLLBAR_AddValue(Emv.scro,4); break;
case KEY_LEFT: GUI_StoreKeyMsg(GUI_KEY_LEFT,1); break;
case KEY_RIGHT: GUI_StoreKeyMsg(GUI_KEY_RIGHT,1); break;
发现一个现象,上下翻页正常,但每次响应左右按键时当前的行都会自动返回到第一行(当然列表也确实左右移动了)。
但是如果把上下按键的响应代码改成如下:
case KEY_UP:
for( i=0; i<4; i++ )
{
GUI_StoreKeyMsg(GUI_KEY_UP,1);
}
break;
case KEY_DOWN:
for( i=0; i<4; i++ )
{
GUI_StoreKeyMsg(GUI_KEY_DOWN,1);
}
break;
左右翻页时就不再复归到第一行了。但这样其实是实现不了翻页的效果的,比如一开始显示0123行,响应一次下键后,虽然已经选中第4行,但页面显示的却是3456行.
而用滚动条的方式是可以实现翻页的效果。一开始显示0123行,响应一次后就会显示4567行。
于是又尝试给列表绑定一个水平滚动条,然后在左右按键里面直接操作水平滚动条,发现也会复归到第一行。
怀疑EMWIN响应左右按键或者水平滚动条消息的时候,都按照当前选择的行去重新定位显示了,因为仅操作滚动条去上下滚动或者左右滚动,实际选择的其实一直是第一行。
不知道这是不是EMWIN对实体按键响应的一个BUG,暂时记录下,请教硬汉哥是否遇到过类似情况?
|
|