完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛扫一扫,分享给好友
|
/*******************************************************************
* * static code * ******************************************************************** */ /******************************************************************* * * _cbBkWindow */ static void _cbBkWindow(WM_MESSAGE* pMsg) { switch (pMsg->MsgId) { case WM_PAINT: GUI_ClearRect(0, 50, 319, 239); default: WM_DefaultProc(pMsg); } } /******************************************************************* * * _cbWindow */ static void _cbWindow(WM_MESSAGE* pMsg) { GUI_RECT Rect; switch (pMsg->MsgId) { case WM_PAINT: WM_GetInsideRect(&Rect); GUI_SetBkColor(GUI_RED); GUI_SetColor(GUI_YELLOW); GUI_ClearRectEx(&Rect); GUI_DrawRectEx(&Rect); GUI_SetColor(GUI_BLACK); GUI_SetFont(&GUI_Font8x16); GUI_DispStringHCenterAt("Foreground window", 75, 40); break; default: WM_DefaultProc(pMsg); } } /******************************************************************* * * _MoveWindow */ static void _MoveWindow(const char* pText) { WM_HWIN hWnd; int i; /* Create foreground window */ hWnd = WM_CreateWindow(10, 50, 150, 100, WM_CF_SHOW, _cbWindow, 0); GUI_Delay(500); /* Move foreground window */ for (i = 0; i < 40; i++) { WM_MoveWindow(hWnd, 2, 2); GUI_Delay(10); } /* Show text before deleting window if we have one */ if (pText) { GUI_DispStringAt(pText, 5, 50); GUI_Delay(2500); } /* Delete foreground window */ WM_DeleteWindow(hWnd); WM_Invalidate(WM_HBKWIN); GUI_Exec(); } /******************************************************************* * * _DemoRedraw */ static void _DemoRedraw(void) { WM_CALLBACK* _cbOldBk; GUI_SetBkColor(GUI_BLACK); GUI_Clear(); GUI_SetColor(GUI_WHITE); GUI_SetFont(&GUI_Font24_ASCII); GUI_DispStringHCenterAt("WM_Redraw - Sample", 160, 5); GUI_SetFont(&GUI_Font8x16); while(1) { /* Move a window over background */ _MoveWindow("Background has not been redrawn"); /* Clear background */ GUI_ClearRect(0, 50, 319, 239); GUI_Delay(1000); /* Set callback for background window */ _cbOldBk = WM_SetCallback(WM_HBKWIN, _cbBkWindow); /* Move a window over background */ _MoveWindow("Background has been redrawn"); /* Delete callback for Background window */ WM_SetCallback(WM_HBKWIN, _cbOldBk); } } int main(void) { SystemInit(); delay_init(72); //???±?????? NVIC_Configuration(); uart_init(9600); LED_Init(); KEY_Init(); GUI_Init(); GUI_SetBkColor(GUI_BLACK); GUI_Clear(); LED1=0; _DemoRedraw(); //LED1=0; while(1) { delay_ms(800); LED0 = !LED0; } } 以上是 码源里提供的例程,相信大家都试验过。。。。。我的问题是……当把例程拷贝到自己的工程里,编译通过以后,。。。在自己的液晶屏上只显示如图所示的东西。。。感觉不太对。。。而且,根本没有进入主函数的WHILE循环(因为LED0不闪)。。。LED1是用来做测试的。。当在_DemoRedraw()这个函数上面时,LED1亮。当在_DemoRedraw();下面时候, LED1不亮。。。。所以,我觉得函数在_DemoRedraw()里面没有跳出……………… 请问,(1)究竟是什么原因呢??? (2)如果看到的大侠,心情不错,能不能帮忙解释一下,这个例程究竟是怎么执行,并利用回调的(小弟,现在对回调的概念很模糊)……祝大侠今晚有艳遇……这是每个工科男的心思……哎 |
|
相关推荐
7个回答
|
|
|
帮顶。。。。
|
|
|
|
|
|
_DemoRedraw 这个函数里有while 怎么跳出
|
|
|
|
|
|
恩 。。。是哦。。。之前居然没发现。。。。那怎么才能让他跳出来,去执行主函数里面的循环呢??? 还有就是,我感觉,
_MoveWindow("Background has not been redrawn"); 这一句和其他几句 ,都没有执行。。。是什么原因呢? |
|
|
|
|
|
|
|
|
|
|
|
没有用过这种方式,抱歉我看不懂,常规是创建后循环调用GUI_Exec()
|
|
|
|
|
|
可能是卡在GUI_Delay()函数了,你追踪GUI_Delay()看看
|
|
|
|
|
|
这个例程主要是为了展示WM_SetCallback();函数的用法,该函数是用来设置回调函数的,从而便是展示ucGUI回调机制的用法
没运行过这个例程,看了看这个程序 (1)官方给的DEMO通常都是一个while循环,所以_DemoRedraw这个函数不会退出,也不会执行程序中LED灯闪烁的功能 (2)根据代码,每次while循环一次可以看到两次有一个窗口在移动,用户可以观察这窗口移动过程中,一次移动会出现Foreground window的字样(如楼主所传的图片中所示),而另一次不会。。。原因就在于WM_HBKWIN窗口(桌面窗口)的回调函数发生了变化 |
|
|
|
|
只有小组成员才能发言,加入小组>>
1018 浏览 1 评论
1849 浏览 0 评论
1830 浏览 1 评论
3254 浏览 5 评论
3581 浏览 9 评论
1021浏览 1评论
1850浏览 1评论
如何知道嵌入式电子控制单元 (ECU) 中的RAM使用情况?
1360浏览 1评论
1852浏览 0评论
1178浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 02:24 , Processed in 0.840116 second(s), Total 88, Slave 68 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2933