硬汉嵌入式论坛

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

[emWin] emWin的lisview创建16*30单元格性能测试

[复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106640
QQ
发表于 2023-5-19 12:07:22 | 显示全部楼层 |阅读模式



群友提的这么个问题,下午了简单创建个窗口测试下。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106640
QQ
 楼主| 发表于 2023-5-23 07:59:14 | 显示全部楼层
测试了,没问题,速度很快

下载 (1).png

[C] 纯文本查看 复制代码
/*
*********************************************************************************************************
*	                                  
*	模块名称 : GUI应用
*	文件名称 : MainTask.c
*	版    本 : V1.0
*	说    明 : 应用代码。             
*              
*	修改记录 :
*		版本号   日期         作者          说明
*		V1.0    2021-08-20   Eric2013  	    首版    
*                                     
*	Copyright (C), 2021-2030, 安富莱电子 [url]www.armfly.com[/url]
*
*********************************************************************************************************
*/
#include "MainTask.h"
#include "bsp.h"


  
  
/*
*********************************************************************************************************
*	                                     宏定义
*********************************************************************************************************
*/
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_LISTVIEW_0 (GUI_ID_USER + 0x01)


/*
*********************************************************************************************************
*	                       GUI_WIDGET_CREATE_INFO类型数组
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = 
{
	{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 800, 480, 0, 0x64, 0 },
	{ LISTVIEW_CreateIndirect, "Listview", ID_LISTVIEW_0, 25, 5, 750, 410, 0, 0x0, 0 },
};

/*
*********************************************************************************************************
*	函 数 名: _cbDialog
*	功能说明: 对话框回调函数		
*	形    参: pMsg  回调参数 
*	返 回 值: 无
*********************************************************************************************************
*/
static void _cbDialog(WM_MESSAGE * pMsg) 
{
	WM_HWIN hItem;
	int     NCode;
	int     Id;
	HEADER_Handle hHeader;
	char    buf[10];
	static char  Value = 0;

	switch (pMsg->MsgId) 
	{
		case WM_INIT_DIALOG:
			
			//
			// 初始化框架窗口
			//
			hItem = pMsg->hWin;
			FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
			FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
			FRAMEWIN_SetText(hItem, "armfly");
		
			//
			// 初始列表控件
			//
			hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
			/* 设置列表控件中header控件的所显示文本的字体 */
			hHeader = LISTVIEW_GetHeader(hItem);
			HEADER_SetFont(hHeader, GUI_FONT_16_ASCII);

			/* 添加四列表,调用一次函数LISTVIEW_AddColumn添加一列 */
			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			
			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);

			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "3", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "4", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "5", GUI_TA_HCENTER | GUI_TA_VCENTER);
			LISTVIEW_AddColumn(hItem, 25, "6", GUI_TA_HCENTER | GUI_TA_VCENTER);
	
			/* 添加三行,调用一次函数LISTVIEW_AddRow添加一行 */
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
			LISTVIEW_AddRow(hItem, NULL);
		
			/* 为列表控件三行四列共12个选项全部添加文本 */
			LISTVIEW_SetItemText(hItem, 0, 0, "A00");
			LISTVIEW_SetItemText(hItem, 1, 0, "A01");
			LISTVIEW_SetItemText(hItem, 2, 0, "A02");
			LISTVIEW_SetItemText(hItem, 3, 0, "A03");
			
			LISTVIEW_SetItemText(hItem, 0, 1, "B10");
			LISTVIEW_SetItemText(hItem, 1, 1, "B11");
			LISTVIEW_SetItemText(hItem, 2, 1, "B12");
			LISTVIEW_SetItemText(hItem, 3, 1, "B13");
			
			LISTVIEW_SetItemText(hItem, 0, 2, "C20");
			LISTVIEW_SetItemText(hItem, 1, 2, "C21");
			LISTVIEW_SetItemText(hItem, 2, 2, "C22");
			LISTVIEW_SetItemText(hItem, 3, 2, "C23");
			
			/* 设置列表控件选项中所显示文本的字体 */
			LISTVIEW_SetFont(hItem, GUI_FONT_16_ASCII);
			/* 设置列表控件表格可见 */
			LISTVIEW_SetGridVis(hItem, 1);
			break;
		
		case WM_NOTIFY_PARENT:
			Id    = WM_GetId(pMsg->hWinSrc);
			NCode = pMsg->Data.v;
			switch(Id) 
			{
				case ID_LISTVIEW_0: 
					switch(NCode) 
					{
						case WM_NOTIFICATION_CLICKED:
							break;
						
						case WM_NOTIFICATION_RELEASED:
							break;
						
						case WM_NOTIFICATION_SEL_CHANGED:
							break;
					}
			}
			break;
			
		case WM_TIMER:
			/* 每100ms更新一次列表控件中第一个选项和最后一个选项所显示的文本,这里是做了一个简单的计数 */
			hItem = WM_GetDialogItem(pMsg->hWin, ID_LISTVIEW_0);
			sprintf(buf, "%d", Value++);
			LISTVIEW_SetItemText(hItem, 0, 0, buf);
			LISTVIEW_SetItemText(hItem, 3, 2, buf);
			
			WM_RestartTimer(pMsg->Data.v, 100);
			
		default:
			WM_DefaultProc(pMsg);
			break;
	}
}

/*
*********************************************************************************************************
*	函 数 名: CreateFramewin
*	功能说明: 创建对话框		
*	形    参: 无
*	返 回 值: 返回对话框句柄
*********************************************************************************************************
*/
WM_HWIN CreateFramewin(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();
	
	/*
	 关于多缓冲和窗口内存设备的设置说明
	   1. 使能多缓冲是调用的如下函数,用户要在LCDConf_Lin_Template.c文件中配置了多缓冲,调用此函数才有效:
		  WM_MULTIBUF_Enable(1);
	   2. 窗口使能使用内存设备是调用函数:WM_SetCreateFlags(WM_CF_MEMDEV);
	   3. 如果emWin的配置多缓冲和窗口内存设备都支持,二选一即可,且务必优先选择使用多缓冲,实际使用
		  STM32H7 + 32位SDRAM + RGB565/RGB888平台测试,多缓冲可以有效的降低窗口移动或者滑动时的撕裂
		  感,并有效的提高流畅性,通过使能窗口使用内存设备是做不到的。
	   4. 所有emWin例子默认是开启三缓冲。
	*/
	WM_MULTIBUF_Enable(1);
	
	/*
       触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
	   此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
	   TOUCH_Calibration(2); 参数为2表示两点校准
	   TOUCH_Calibration(4); 参数为4表示四点校准
	*/
#if 0
	LCD_SetBackLight(255);
    TOUCH_Calibration(2);
#endif

	/*
       触摸校准函数默认是注释掉的,电阻屏需要校准,电容屏无需校准。如果用户需要校准电阻屏的话,执行
	   此函数即可,会将触摸校准参数保存到EEPROM里面,以后系统上电会自动从EEPROM里面加载。
	*/
    //TOUCH_Calibration();
	
	/* 创建对话框 */
	CreateFramewin();
    
    /* 屏幕显示后点亮,有效防止瞬间高亮 */
    GUI_Delay(200);
	LCD_SetBackLight(255);
		
	while(1) 
	{
		GUI_Delay(20);
	}
}

/***************************** 安富莱电子 [url]www.armfly.com[/url] (END OF FILE) *********************************/

回复

使用道具 举报

0

主题

67

回帖

67

积分

初级会员

积分
67
发表于 2023-5-23 11:22:28 | 显示全部楼层
eric2013 发表于 2023-5-23 07:59
测试了,没问题,速度很快

我最多的一次,曾经创建了上千个
回复

使用道具 举报

30

主题

40

回帖

130

积分

初级会员

积分
130
发表于 2023-5-30 14:43:49 | 显示全部楼层
有群吗,可否加一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106640
QQ
 楼主| 发表于 2023-5-30 15:36:08 | 显示全部楼层
hhh535 发表于 2023-5-30 14:43
有群吗,可否加一下

现在没有专门的交流群了,只有开发板售后群
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:47 , Processed in 0.185818 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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