硬汉嵌入式论坛

 找回密码
 立即注册
查看: 2635|回复: 8
收起左侧

[emWin] 关于LISTVIEW控件多出一行的问题

[复制链接]

14

主题

35

回帖

14

积分

初级会员

积分
14
发表于 2017-7-19 11:34:38 | 显示全部楼层 |阅读模式
使用LISTVIEW控件,发现无论怎样设置,在末尾处都会多出一行,不晓得是什么原因
191.jpg


同时,在使用该LISTVIEW控件时,我用PageDown按键时(模拟器用键盘,或者开发板用外部按键),并不能跳到下一页,而是这一页的最后第二行。PageUp同样效果。
不知道是不是上面多出一行的原因导致的?该如何解决呢?[s:120]
192.jpg



该控件代码如下:

static void _cbDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    char    acBuffer[200];
    char    acNum[5];
    int     NCode;
    int     Id;
    U32        i;
    SCROLLBAR_Handle hScrollbar;
   
    switch (pMsg->MsgId)
    {   
        case WM_INIT_DIALOG:
            ... ...
            hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
            LISTVIEW_SetGridVis(hItem, 1);
            LISTVIEW_SetLBorder(hItem, 2);
            LISTVIEW_SetRowHeight(hItem, 30);
            LISTVIEW_SetHeaderHeight(hItem, 0);
            LISTVIEW_SetFont(hItem, GUI_FONT_24B_ASCII);
            LISTVIEW_AddColumn(hItem, 60, "", GUI_TA_LEFT);
            LISTVIEW_AddColumn(hItem, 570, "", GUI_TA_LEFT);
            for (i = 0; i < 30; i++)
            {
                LISTVIEW_AddRow(hItem, NULL);
                sprintf(acNum, "%0.4d", i);
                LISTVIEW_SetItemText(hItem, 0, i, acNum);
                sprintf(acBuffer, "Item %d", i);
                LISTVIEW_SetItemText(hItem, 1, i, acBuffer);
            }
            hScrollbar = SCROLLBAR_CreateAttached(hItem, GUI_ID_VSCROLL);
            SCROLLBAR_SetWidth(hScrollbar, 15);
            
            break;
        ... ...
    }
    ... ...
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-19 11:40:53 | 显示全部楼层
这个需要调整你的listview控件大小,正好显示这么多选项,创建的时候就设置好,你试试是否可行。然后再调试你的pagedown控件。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-19 12:14:31 | 显示全部楼层

回 eric2013 的帖子

eric2013:
这个需要调整你的listview控件大小,正好显示这么多选项,创建的时候就设置好,你试试是否可行。然后再调试你的pagedown控件。
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] =
{
         .. ...
        { LISTVIEW_CreateIndirect, "Listview", ID_LISTVIEW_0, 0, 60, 630, 480, 0, 0x0, 0 },
};

eric2013,这里LISTVIEW控件总体大小为630*480的,总高度为480,每行高度为30,刚好一页显示16行。
但是我的内容不止16行~

同时我发现,用 下键 永远聚焦不到最后一行[s:122]
193.jpg
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-19 12:32:32 | 显示全部楼层

回 mumuha 的帖子

mumuha:static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] =
{
         .. ...
        { LISTVIEW_CreateIndirect, "Listview", ID_LISTVIEW_0, 0, 60, 630, 480, 0, 0x0, 0 },
.. .. (2017-07-19 12:14) 
聚焦的这个问题只能多试试了,另外为什么要聚焦到最后一行呢,不能的话,直接按键发送自定义窗口消息,在自定义消息里面直接调整滚动条的位置即可SCROLLBAR_SetValue,这样很方便就是实现了翻页功能,这是不是你需要的。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-19 13:55:23 | 显示全部楼层
聚焦最后一行不是主要目的,主要是能够实现翻页:第一页为0~15,PageDown则为第二页16~31。
我尝试用一下用按键发送自定义窗口消息来处理吧。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-19 16:31:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:

聚焦的这个问题只能多试试了,另外为什么要聚焦到最后一行呢,不能的话,直接按键发送自定义窗口消息,在自定义消息里面直接调整滚动条的位置即可SCROLLBAR_SetValue,这样很方便就是实现了翻页功能,这是不是你需要的。
硬汉哥,我尝试用了按键发送自定义窗口消息,聚焦的行数可以按照计划执行,但是你所说的调整滚动条位置实现翻页没有成功,请你看下代码,谢谢~

static void _cbDialog(WM_MESSAGE * pMsg)
{
    WM_HWIN hItem;
    char    acBuffer[200];
    char    acNum[5];
    int     NCode;
    int     Id;
    U32        i;
    SCROLLBAR_Handle hScrollbar;
    int        selNum;
    int        scrollNum;
    switch (pMsg->MsgId)
    {   
        case WM_INIT_DIALOG:
            ... ...
            hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
            LISTVIEW_SetGridVis(hItem, 1);
            LISTVIEW_SetLBorder(hItem, 2);
            LISTVIEW_SetRowHeight(hItem, 30);
            LISTVIEW_SetHeaderHeight(hItem, 0);
            LISTVIEW_SetFont(hItem, GUI_FONT_24B_ASCII);
            LISTVIEW_AddColumn(hItem, 60, "", GUI_TA_LEFT);
            LISTVIEW_AddColumn(hItem, 570, "", GUI_TA_LEFT);
            for (i = 0; i < 30; i++)
            {
                LISTVIEW_AddRow(hItem, NULL);
                sprintf(acNum, "%0.4d", i);
                LISTVIEW_SetItemText(hItem, 0, i, acNum);
                sprintf(acBuffer, "Item %d", i);
                LISTVIEW_SetItemText(hItem, 1, i, acBuffer);
            }
            hScrollbar = SCROLLBAR_CreateAttached(hItem, GUI_ID_VSCROLL);
            SCROLLBAR_SetWidth(hScrollbar, 15);
            
            break;
        
        case WM_KEY:
            switch(((WM_KEY_INFO*)(pMsg->Data.p))->Key)
            {
                ... ...
                case GUI_KEY_PAGEDOWN:    // 并非GUI.h里面的GUI_KEY_PGDOWN
                    WM_SendMessageNoPara(pMsg->hWin, MSG_TEST);
                    break;
                ... ...
            }
            break;
        
        case MSG_TEST:
            scrollNum = SCROLLBAR_GetValue(hListView);
            SCROLLBAR_SetValue(hListView, scrollNum + 16);    // 没有实现翻页

            selNum = LISTVIEW_GetSel(hListView);
            LISTVIEW_SetSel(hListView, selNum + 16);    // 实现了翻页后行数的聚焦,比如目前聚焦在0000行,翻页后聚焦在0016行

            break;
    }
    ... ...
}
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-19 16:36:20 | 显示全部楼层
这个句柄不对。

scrollNum = SCROLLBAR_GetValue(hListView);
SCROLLBAR_SetValue(hListView, scrollNum + 16);   

得是滚动条的句柄。把这个句柄设置成全局变量或者静态局部变量。
回复

使用道具 举报

14

主题

35

回帖

14

积分

初级会员

积分
14
 楼主| 发表于 2017-7-19 16:53:44 | 显示全部楼层

回 eric2013 的帖子

eric2013:
这个句柄不对。

scrollNum = SCROLLBAR_GetValue(hListView);
SCROLLBAR_SetValue(hListView, scrollNum + 16);   

.......
eric2013:

聚焦的这个问题只能多试试了,另外为什么要聚焦到最后一行呢,不能的话,直接按键发送自定义窗口消息,在自定义消息里面直接调整滚动条的位置即可SCROLLBAR_SetValue,这样很方便就是实现了翻页功能,这是不是你需要的。
句柄hScrollbar我在实际工程中已经设置成静态局部变量了,就是这个句柄的问题,改成如下即可达到预期。谢谢硬汉哥!![s:130]

scrollNum = SCROLLBAR_GetValue(hScrollbar);
SCROLLBAR_SetValue(hScrollbar, scrollNum + 16);
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117635
QQ
发表于 2017-7-20 01:13:13 | 显示全部楼层

回 mumuha 的帖子

mumuha:句柄hScrollbar我在实际工程中已经设置成静态局部变量了,就是这个句柄的问题,改成如下即可达到预期。谢谢硬汉哥!![s:130]

scrollNum = SCROLLBAR_GetValue(hScrollbar);
SCROLLBAR_SetValue(hScrollbar, scrollNum + 16); (2017-07-19 16:53) 
[s:130]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-19 15:17 , Processed in 0.044726 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表