完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
12个回答
|
|
μc/gui中重绘是单独在一起的,是由GUI_Exec();函数中的WM_Exec();函数中的_DrawNext();函数向各个窗口(或控件)发送WM_PAINT重绘类型消息,这些窗口(控件)的系统级回调函数接收到该消息,调用它们的_Paint();函数(该函数为static类型的函数,属于私有类型)绘制自己的控件。。。
GUI_CreateDialogBox();函数只是创建窗口,对于那些需要显示的窗口(创建窗口(控件)时设置了WM_SF_ISVIS属性的窗口)将调用WM_ShowWindow();函数设置窗口所在区域为无效区域,从而与该无效区域交叉的窗口都将被设置为无效窗口,但并不涉及绘制的内容 WM_ShowWindow();函数是将一个窗口设置为无效窗口(修改窗口的无效属性、修改窗口的无效矩形实现的),从而表示该窗口是一个需要显示的窗口,因而也不涉及绘制内容 WM_Exec();函数在执行时将会从以桌面窗口为根的窗口树上遍历所有需要重绘的窗口,如上所述,发送WM_PAINT消息,通知这些窗口进行重绘 因而,用户编写GUI程序时,必须要有一个函数不停的调用GUI_Exec();函数或者WM_Exec();函数完成重绘操作 添加操作系统的可以建立一个如下任务 while(1) { GUI_Exec(); //重绘所有需要重绘的窗口 Os_Dly_ms(20); //执行操作系统调度并延时,如果20ms时间太长可以稍微剪短 } 不带操作系统的需要有 while(1){ GUI_Exec(); } 在GUI中GUI_Delay();函数中包含了GUI_Exec();函数,所以不带操作系统的也可以换成如下代码执行重绘 while(1) GUI_Delay(20); //延时20ms并且重绘 有一个名字叫做GUI_ExecCreateDialogBox();的函数(名字可能有误,就是大家利用GUIBuilder建立的对话框时使用的那个函数),在该函数中调用GUI_CreateDialogBox();函数创建一个对话框,并且在while循环中调用GUI_Exec();函数进行GUI的重绘,while循环在对话框被关闭后才退出,所以利用该函数建立的对话框又称为阻塞型对话框 这些属于GUI的原理部分,但可能与楼主遇到的问题没有关系,添加了GUI会适当的降低了液晶屏重绘的速度,但应该不会影响太多。。。。。 |
|
|
|
只是你的个例吗?
|
|
|
|
说明你的底层液晶屏操作的代码不优化,由于对话框占据的区域比较大,所以填充起来比较慢
你可以写一个简单的填充液晶屏全部区域的程序,更换不同的颜色,看看刷一次屏幕需要多长时间 |
|
|
|
我按照你的方法测试了填充液晶,感觉速度是很快的。已经把LCD_L0_FillRect函数直接改成填充的。但是如果不用DIALOG的话刷新还是很快的。用上之后就刷新dialog会很慢。跟踪GUI_CreateDialogBox函数里面调用了WM_ShowWindow函数显示,但是WM_ShowWindow函数怎样调用底层液晶程序就不知道在哪条语句了。请大哥给我解释下吧。
WM_HWIN GUI_CreateDialogBox(const GUI_WIDGET_CREATE_INFO* paWidget, int NumWidgets, WM_CALLBACK* cb, WM_HWIN hParent, int x0, int y0) { WM_HWIN hDialog = paWidget->pfCreateIndirect(paWidget, hParent, x0, y0, cb); /* Create parent window */ WM_HWIN hDialogClient = WM_GetClientWindow(hDialog); WIDGET_OrState(hDialog, paWidget->Flags); WM_ShowWindow(hDialog); WM_ShowWindow(hDialogClient); while (--NumWidgets > 0) { WM_HWIN hChild; paWidget++; hChild = paWidget->pfCreateIndirect(paWidget, hDialogClient, 0, 0, 0); /* Create child window */ WM_ShowWindow(hChild); } WM_SetFocusOnNextChild(hDialog); /* Set the focus to the first child */ WM_SendMessageNoPara(hDialogClient, WM_INIT_DIALOG); return hDialog; } void WM_ShowWindow(WM_HWIN hWin) { if (hWin) { WM_Obj *pWin; WM_LOCK(); pWin = WM_H2P(hWin); if ((pWin->Status & WM_SF_ISVIS) == 0) { /* First check if this is necessary at all */ pWin->Status |= WM_SF_ISVIS; /* Set Visibility flag */ WM_InvalidateWindowDescs(hWin); /* Mark content as invalid */ #if WM_SUPPORT_NOTIFY_VIS_CHANGED WM__NotifyVisChanged(hWin, &pWin->Rect); #endif } WM_UNLOCK(); } } |
|
|
|
分析得很好,谢谢。先找下资料优化底层!请问优化的话对液晶的底层进行优化,那ucgui还有没有哪些地方要优化的呢。已经优化了一个填充函数。或者有没有什么好的资料可以提供给小弟呢?
|
|
|
|
简单的优化可以使用LCD存储设备,即为每一个新建的窗口、控件都添加WM_SF_MEMDEV属性
复杂的优化需要借助更加NB的液晶屏,这些液晶屏本身的读写速度比较快,而且支持一些比较复杂的操作,譬如直接移动液晶屏上的一些区域到另外一个区域。。。 资料,现在没有现成的资料。不过,本人一直在整理自己之前对GUI的理解,准备整理成册,会对GUI的运行原理、应用开发做详细的介绍,现在正在进行中,短则一个月就能完成.... 一直在电子发烧友网解答GUI相关的内容,论坛中也有一些网友会解答,欢迎来关注。 |
|
|
|
谢版主大哥,自己再试试
|
|
|
|
我也碰到了哦,是底层的问题呢!
还有一个画横线函数要优化: static void _DrawBitLine16BPP(GUI_DEVICE * pDevice, int x, int y, U16 const GUI_UNI_PTR * p, int xsize) { LCD_SetWindow(x, y,x+xsize,y );//ili9488 only 设定坐标范围:左上角,右下角 LCDWriteReg(0x2C); //Write data for (;xsize > 0; xsize--,p++) //写颜色 LCDWriteData(*p); //for (;xsize > 0; xsize--, x++, p++) { //未优化的画线函数 //_SetPixelIndex(pDevice, x, y, *p); //} } |
|
|
|
刚注册的账号回答你的问题 嘿嘿!
|
|
|
|
刚注册的账号回答你的问题 嘿嘿
|
|
|
|
【能接emWin的SPI串口屏】
GLCD功能类似于SPI串口屏,只是SPI接口通信更快速,以至能作为emWin(第三方界面软件库)的图形显示屏,弥补emWin使用字库/图片麻烦以及刷屏慢的缺点,这样emWin做界面就更精美、便捷! emWin界面软件库是运行在用户CPU中的;GLCD负责储存字库和图片,以及接收由emWin发出的绘图指令,并且执行这些绘图指令以显示文字、图片、2D图形等,绘图指令代替像素操作可大大减轻用户CPU的负担;GLCD还管理触摸屏、鼠标、键盘、蜂鸣器、RTC时钟等外设。 更多介绍请看:www.neqee.com |
|
|
|
楼主解决没?我开了一个10ms定时器中断,里面执行GUI_TOUCH_Exec(); 我的带触摸功能!测试时,只操作一个鼠标时,触笔点到哪里,鼠标就到哪里。正确无误。但是添加上ucguibuilder生成的代码后,执行GUI_ExecDialogBox(),一切都不能工作了。定时器中断执行都错误了。求大神指点指点
|
|
|
|
只有小组成员才能发言,加入小组>>
778 浏览 0 评论
1149 浏览 1 评论
2527 浏览 5 评论
2859 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2709 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1066浏览 3评论
190浏览 2评论
453浏览 2评论
368浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
453浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 09:08 , Processed in 1.345206 second(s), Total 101, Slave 82 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号