GUIBuilder生成界面框架不显示的问题

使用GUIBuilder生成界面框架

GUIBuilder生成界面框架不显示的问题_第1张图片

执行生成的函数CreateMyWin();黑屏,没有显示

GUIBuilder生成界面框架不显示的问题_第2张图片

修改如下,加入GUI_Delay(10);之后界面即可正常显示、形参数值可自定

GUIBuilder生成界面框架不显示的问题_第3张图片

以下说明转自其他博客、已声明出处。

可以说emWin所有动作都靠循环执行GUI_Delay()或GUI_Exec(),两个函数没有本质区别,GUI_Exec()包含在GUI_Delay()中,即GUI_Delay()在查询OS_TimeMS变量(通过一个硬件定时器每1ms中断加1)实现延时的时候不断的去调用GUI_Exec(),区别在于GUI_Delay()带延时1ms功能,而GUI_Exec()不带延时,但两个函数作用是一样的。emWin的应用程序主函数一般是这样的:

voidMainTask(void)

{

  GUI_Init();

  创建各个窗体;

  while(1) { GUI_Delay(xx);或GUI_Exec();}

}

  即利用不断的循环执行GUI_Delay(xx);或GUI_Exec();带动emWin所有的东西,包括:界面有改变时刷新界面,获取触摸屏、鼠标、键盘等PID输入设备,执行用户程序中的回调函数,反正就是带动了所有的事情,其实就是emWin的动作引擎。

  GUI_Exec()首先会去查询界面有没有改变,如果什么都没有改变,是不会去刷界面,比如一个静态界面放在那里不去动它,这个时候emWin并没有执行和显示相关的东西。这就是为什么我们要在窗口上显示一些文字(是单纯显示文字而不是用Text控件)或绘制一条直线,当我们在程序的另一处改变文字内容,但改变永远不会显示出来,因为这些是2D绘图而不是控件,emWin是不会感知到改变的(控件就会),所以要用WM_InvalidateArea()/ WM_InvalidateRect()/ WM_InvalidateWindow()函数使那个区域无效之后emWin才感知到那个区域有变化而去重绘那个区域。还有就是我们在程序里改变了界面某个东西,而这个改变是不会马上显示出来的,要等emWin下一次执行GUI_Exec()才会显示出来。

  在每次执行GUI_Exec()时,都会调用用户界面程序中的回调函数,包括所有窗体(显示和隐藏)的回调函数都会进入一遍,看到这里你应该知道在回调函数里能做什么事情了吧?所有事情都能做。
————————————————
版权声明:本文为CSDN博主「neqee」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/neqee/article/details/80005561

你可能感兴趣的:(stm32-HAL库,STemWin)