金牌会员
 
- 积分
- 2872
- 金钱
- 2872
- 注册时间
- 2018-1-24
- 在线时间
- 258 小时
|
发表于 2018-1-29 12:01:40
|
显示全部楼层
版主,各位坛友大家好,最近学习EMWIN遇到了一个问题,创建窗口移动时使能存储设备时显示不正常,而且把不是窗口的部分给填充了,失能存储设备后,一切演示正常,效果如下所示,请大家帮我解答一下,谢谢!!!!!!!!!!!!!
一、使能存储设备现象:
二、失能存储设备现象
三、问题:
1.我的EMWIN用的内存总大小为960*1024,足以演示这个例程,而且在电脑上仿真也正常,移植到板子上就不正常了?而且使用存储设备的宏#defineGUI_SUPPORT_MEMDEV (1) 也定义了。移动时边框也异常了,不整齐。
2.创建的窗口使用内储设备来重绘,背影回调刷新是0,50,320,240这个区域,但为什么在失效WM_Invalidate(WM_HBKWIN);这个之后,上面的标题也给乱填充了呢?
//===========================================================================背景窗口回调函数
static void _cbBkWindow(WM_MESSAGE *pMsg)
{
switch(pMsg->MsgId) //¸ù¾Y2»í¬μÄÏûÏ¢ààDí′|àí
{
case WM_PAINT:
GUI_ClearRect(0,50,320,210);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
//===========================================================================创建窗口回调函数
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_Font16_ASCII);
GUI_DispStringHCenterAt("Foreground Window",75,40);
break;
}
default:
{
WM_DefaultProc(pMsg);
break;
}
}
}
//===========================================================================移动窗口
static void _MoveWindow(const char* pText)
{
WM_HWIN hWnd;
int i;
hWnd = WM_CreateWindow(50,50,150,100,WM_CF_SHOW,_cbWindow,0);
for(i=0;i<20;i++)
{
WM_MoveWindow(hWnd,3,3);
GUI_Delay(10);
}
if(pText)
{
GUI_DispStringAt(pText,5,50);
GUI_Delay(300);
}
WM_DeleteWindow(hWnd);
WM_Invalidate(WM_HBKWIN);
GUI_Exec();
}
//===========================================================================演示代码主函数
void Emwin_DemoRedraw(u8 index)
{
char buff[45];
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_Font16B_ASCII);
if(index)WM_DisableMemdev(WM_HBKWIN);//失能存储设备
else WM_EnableMemdev(WM_HBKWIN);//使能存储设备
while(1)
{
_MoveWindow("Background has not been redraw"); //òƶˉ′°¿ú
sprintf(buff,"GUI UsedBlocks: %.8d FreeBlocks: %.8d\r\n", GUI_ALLOC_GetNumUsedBlocks(), GUI_ALLOC_GetNumFreeBlocks());
GUI_DispStringHCenterAt(buff,160,210);
GUI_Delay(2000);
_cbOldBK = WM_SetCallback(WM_HBKWIN,_cbBkWindow);
_MoveWindow("Background has been redraw");
WM_SetCallback(WM_HBKWIN,_cbOldBK);
sprintf(buff,"GUI UsedBlocks: %.8d FreeBlocks: %.8d\r\n", GUI_ALLOC_GetNumUsedBlocks(), GUI_ALLOC_GetNumFreeBlocks());
GUI_DispStringHCenterAt(buff,160,210);
GUI_Delay(2000) ;
break;
}
} |
|
|