新手上路
- 积分
- 38
- 金钱
- 38
- 注册时间
- 2019-1-4
- 在线时间
- 14 小时
|
10金钱
两个窗体部分重合,下层的窗体动态显示内容(比如走动的线条),希望达到的功能是上层窗体关闭后,下层的窗体的动态内容依然显示。 目前的状况是,上层的窗体使用WM_DeleteWindow函数删除以后,并没有完全消失,在两个窗体重叠部分,留下残影,没有重叠的部分确实是消失了,为什么?要怎么做?
代码如下:
//创建下层的窗体
void EcgArea(void)
{
ecgWaveWin = WINDOW_CreateEx(0, PARAM_ECG_Y, WAVE_AREA_WIDTH, PARAM_AREA_HEIGHT
, 0, WM_CF_SHOW, 0, GUI_ID_USER + 5, cbEcgWave);
WINDOW_SetBkColor(ecgWaveWin, GUI_BLACK);
}
//在任务里每20毫秒执行一次
void TestTask(void)
{
WM_SetCallback(ecgWaveWin, cbEcgWave);
WM_Exec();
}
//窗体回调, 动态连续地画直线
static void cbEcgWave(WM_MESSAGE *pMsg)
{
switch (pMsg->MsgId)
{
case WM_PAINT:
GUI_SetColor(GUI_GREEN);
if (sEraseX + 4 >= WAVE_AREA_WIDTH)
sEraseX = 0;
if (sPointX >= WAVE_AREA_WIDTH)
{
sPointX = 0;
sEraseX = sPointX + 2;
}
GUI_DrawLine(sPointX, POINT_Y, sPointX + 1, POINT_Y);
GUI_SetColor(GUI_BLACK);
GUI_FillRect(sEraseX, 0, sEraseX + 2, PARAM_AREA_HEIGHT);
sPointX++;
if (sPointX < WAVE_AREA_WIDTH - 4)
sEraseX++;
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
ecgWaveWin是下层的窗体。
上层的窗体:
void CreateEcgSetupDialog(void)
{
ecgSetupDlg = WINDOW_CreateEx(ECG_SETUP_DIALOG_X, ECG_SETUP_DIALOG_Y, ECG_SETUP_DIALOG_WIDTH, ECG_SETUP_DIALOG_HEIGHT
, 0, WM_CF_SHOW, 0, RESOURCE_DLG_ECG_SETUP, cbEcgSetupDialog);
WINDOW_SetBkColor(ecgSetupDlg, GUI_LIGHTGRAY);
WM_Exec();
}
void DeleteEcgDialog(void)
{
WM_DeleteWindow(ecgSetupDlg);
WM_Exec();
}
下层窗体动态画线的代码,在一个任务里,:
void vTaskTestWave(void *pvParameter)
{
while(1)
{
TestTask();
vTaskDelay(4);
}
}
当某个时候调用CreateEcgSetupDialog创建上层窗体,然后调用DeleteEcgDialog删除上层窗体时,上下层窗体重叠的一部分没有消失,这是为什么???
如果不使用vTaskTestWave这个定时任务,创建下层窗体时在窗体里画一些图形,当创建上层窗体时,下层窗体的一部分被被挡住,但当删除上层窗体后,挡住的部分会正常显示出来。
|
|