初级会员

- 积分
- 192
- 金钱
- 192
- 注册时间
- 2015-7-22
- 在线时间
- 126 小时
|
ucgui创建对话框时候出现问题,我用GUI_CreateDialogBox创建一个对话框A后,利用WM_Exec刷新显示成功。然后我在A对话框的回调函数里用按钮实现弹出B对话框实现之后,在B对话框的回调函数里用按键返回到A对话框,实现之后往复点击几次后屏幕卡死了。请问问题出在哪里?谢谢!
代码如下
static void Display_Task(void )
{
GUI_Init();//ucgui初始化
while(1)
{
ADialogBox(); //创建A对话框
while (1)
{
WM_Exec(); //刷新屏幕
}
}
}
static const GUI_WIDGET_CREATE_INFO _MAIN_TABLE[] =
{
/*窗口控件*/ { FRAMEWIN_CreateIndirect, "MyTest", 0, 0, 0, 800,480, FRAMEWIN_CF_ACTIVE,0},
/*按钮控件*/ { BUTTON_CreateIndirect, "下一页", GUI_ID_BUTTON0, 640, 370, 150, 70, 0,0},
{ CHECKBOX_CreateIndirect, NULL, GUI_ID_chbox, 20, 5, 180, 80, 0, 0},
};
static void _cbCallbackA(WM_MESSAGE * pMsg)
{
int Id,NCode;
unsigned short Get_No;
WM_HWIN hDlg;
WM_HWIN hItem;
hDlg = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_PAINT://重绘事件
break;
case WM_INIT_DIALOG: //初始化事件
MainInitDialog(pMsg);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);//控件ID号
NCode = pMsg->Data.v;//通知代码信号量
hItem = WM_GetDialogItem(hDlg, Id);
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
if(Id == GUI_ID_BUTTON0)
{
BDialogBox(); //创建B对话框
}
break;
default:
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
unsigned char ADialogBox(void)
{
MainhWin = GUI_CreateDialogBox(_MAIN_TABLE, GUI_COUNTOF(_MAIN_TABLE), &_cbCallbackA, 0, 0, 0);//创建一个非阻塞式对话框
//WM_Exec();
WM_MakeModal(MainhWin);//设置成模态窗口
GUI_ExecCreatedDialog(MainhWin); //推出模态对话框
return 0;
}
//+++++++++++++++++以下是B对话框+++++++++++++++++++++++++++++++++++++
static const GUI_WIDGET_CREATE_INFO _B_TABLE[] =
{
{ FRAMEWIN_CreateIndirect, "TestB", 0, 0, 0, 800,480, FRAMEWIN_CF_ACTIVE,0},
{ BUTTON_CreateIndirect, "下一页", GUI_ID_BUTTON0+1, 640, 370, 150, 70, 0,0},
{ BUTTON_CreateIndirect, "上一页", GUI_ID_BUTTON0+2, 300, 370, 150, 70, 0,0},
};
static void _cbCallbackPB(WM_MESSAGE * pMsg)
{
int Id,NCode;
WM_HWIN hDlg;
WM_HWIN hItem;
hDlg = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG: //初始化事件
old_hItem = 0;
PBInitDialog(pMsg);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);//控件ID号
NCode = pMsg->Data.v;//通知代码信号量
hItem = WM_GetDialogItem(hDlg, Id);
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
if(Id == GUI_ID_BUTTON0+1)//下一页
{
//PagePC();//翻页。
}
if(Id == GUI_ID_BUTTON0+2)//上一页
{
ADialogBox();//返回A对话框。是不是问题处出这里?我是想实现B对话框上一页按钮返回A对话框。这是两个对话框,如果是三个 //呢?
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
void BDialogBox(void)
{
PBhWin = GUI_CreateDialogBox(_B_TABLE, GUI_COUNTOF(_B_TABLE), &_cbCallbackB, 0, 0, 0);//创建一个非阻塞式对话框
WM_MakeModal(PBhWin);//设置成模态窗口
}
创建两个对话框都成功了,A对话框“下一页”按钮弹出了B对话框;B对话框的“上一页”按钮能显示A对话框,但是反复几次后屏幕就卡死了。
1.我想问题是不是在B对话框的创建里面?A对话框创建后WM_Exec可以刷新;然后B对话框没有刷新?
2.还有可能是不是我没有删除对话框,然后内存被耗光了?
|
|