|
对话框回调函数执行GUI_EndDialog后界面就不该显示对话框了吧?我用模拟器是可以的,关闭对话框后只显示背景窗口,但是我在IAR工程里面执行相同的代码对话框的内容还是显示?请教各位大佬,这是什么原因?小弟先拜谢了。
具体代码如下:
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x00)
#define ID_EDIT_0 (GUI_ID_USER + 0x01)
#define ID_EDIT_1 (GUI_ID_USER + 0x02)
#define WM_UPDATE (WM_USER + 0x00) /* 自定义消息 */
/*
*********************************************************************************************************
* GUI_WIDGET_CREATE_INFO类型数组
*********************************************************************************************************
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
{ FRAMEWIN_CreateIndirect, "Framewin", ID_FRAMEWIN_0, 0, 0, 160, 128, 0, 0x64, 0 },
{ EDIT_CreateIndirect, "Edit", ID_EDIT_1, 38, 49, 81, 27, 0, 0x64, 0 },
};
/*
*********************************************************************************************************
* 函 数 名: _cbDialog
* 功能说明: 对话框回调函数
* 形 参: pMsg 回调参数
* 返 回 值: 无
*********************************************************************************************************
*/
static void _cbDialog(WM_MESSAGE * pMsg)
{
WM_HWIN hItem;
int NCode;
int Id;
WM_HWIN hDlg;
hDlg = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
//
// 初始化框架窗口
//
hItem = pMsg->hWin;
FRAMEWIN_SetFont(hItem, GUI_FONT_32B_ASCII);
FRAMEWIN_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetText(hItem, "armfly");
//
// 初始化编辑框
//
//hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_0);
//EDIT_SetText(hItem, "1024");
//EDIT_SetFont(hItem, GUI_FONT_24B_ASCII);
//
// 初始化编辑框
//
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
EDIT_SetText(hItem, "1024");
EDIT_SetFont(hItem, GUI_FONT_24B_ASCII);
EDIT_SetTextAlign(hItem, GUI_TA_LEFT | GUI_TA_VCENTER);
EDIT_SetSel(hItem, 0, -1); /* 设置选中编辑框中所有文本 */
break;
case WM_UPDATE:
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_1);
EDIT_SetText(hItem, "1356");
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hDlg, 1);
break;
case GUI_KEY_ENTER:
GUI_EndDialog(hDlg, 0);
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id)
{
case ID_EDIT_0:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_VALUE_CHANGED:
break;
}
break;
case ID_EDIT_1:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_VALUE_CHANGED:
break;
}
break;
}
break;
case WM_PAINT:
// PaintWin(pMsg);
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* _cbBkWindow
*/
static void _cbBkWindow(WM_MESSAGE * pMsg)
{
//unsigned i;
switch (pMsg->MsgId)
{
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
GUI_SetColor(GUI_WHITE);
GUI_SetFont(&GUI_Font24_ASCII);
GUI_DispStringHCenterAt("Counting Sample", 80, 5);
break;
default:
WM_DefaultProc(pMsg);
}
}
void MainTask(void)
{
WM_SetCreateFlags(WM_CF_MEMDEV); // Use memory devices on all windows to avoid flicker
GUI_Init();
//
// Check if recommended memory for the sample is available
//
if (GUI_ALLOC_GetNumFreeBytes() < RECOMMENDED_MEMORY) {
GUI_ErrorOut("Not enough memory available.");
return;
}
WM_SetCallback(WM_HBKWIN, &_cbBkWindow);
GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbDialog, 0, 0, 0);
while(1)
{
WM_Exec();
GUI_Exec();
//GUI_Delay(1000);
GUI_SendKeyMsg(GUI_KEY_ENTER,1); /*直接发消息关闭对话框*/
}
}
|
-
St 实际显示结果
-
模拟器显示结果
|