|
按钮创建对话框三次后程序会死掉,同时请教STemwin内存管理问题
代码如下:
extern const GUI_BITMAP bm3;
static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] = {
{ FRAMEWIN_CreateIndirect, "", 0, 0, 0, 320,240, 0,0},
{ BUTTON_CreateIndirect, "Address", GUI_ID_BUTTON0, 240,204,80,36,0,0},
{ BUTTON_CreateIndirect, " M2.5", GUI_ID_BUTTON1, 240,24,80,60 ,0,0},
{ BUTTON_CreateIndirect, "Temperature", GUI_ID_BUTTON2, 240,84,80,60, 0,0},
{ BUTTON_CreateIndirect, "humidity", GUI_ID_BUTTON3, 240,144,80,60, 0,0},
};
static const GUI_WIDGET_CREATE_INFO _aButtonCreateA[] = {
{ FRAMEWIN_CreateIndirect, "Address", 0, 40, 40, 200,180, 0,0},
};
static const GUI_WIDGET_CREATE_INFO _aButtonCreateP[] = {
{ FRAMEWIN_CreateIndirect, " M2.5", 0, 40, 40, 200,180,FRAMEWIN_CF_ACTIVE,0},
};
static const GUI_WIDGET_CREATE_INFO _aButtonCreateT[] = {
{ FRAMEWIN_CreateIndirect, "Temperature", 0, 40, 40, 200,180,FRAMEWIN_CF_ACTIVE,0},
};
static const GUI_WIDGET_CREATE_INFO _aButtonCreateH[] = {
{ FRAMEWIN_CreateIndirect, "humidity", 0, 40, 40, 200,180,FRAMEWIN_CF_ACTIVE,0},
};
void upmap(void);
/*********************************************************************
*
* A′°¿ú
*
**********************************************************************
*/
void PaintDialog_A(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
upmap();
}
void InitDialog_A(WM_MESSAGE * pMsg)
{
BUTTON_Handle Button_Add;
WM_HWIN hWin = pMsg->hWin;
FRAMEWIN_SetTitleVis(hWin,0);
FRAMEWIN_SetBorderSize(hWin,0);
FRAMEWIN_SetClientColor(hWin,GUI_BLACK);
Button_Add=WM_GetDialogItem(hWin,GUI_ID_BUTTON0);
BUTTON_SetBkColor(Button_Add,0,0xff0000 + (255 - 200) * 0x101L);
BUTTON_SetBkColor(Button_Add,1,GUI_BLUE);
}
/*********************************************************************
*
* BD¡′°
*
**********************************************************************
*/
void PaintDialog_ADD(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
}
void InitDialog_ADD(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
// FRAMEWIN_AddButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0, GUI_ID_BUTTON6);
FRAMEWIN_AddCloseButton(hWin, FRAMEWIN_BUTTON_RIGHT, 0);
FRAMEWIN_SetTitleHeight(hWin,16);
FRAMEWIN_SetBarColor(hWin,1,0xff0000 + (255 - 200) * 0x101L);
}
/*********************************************************************
*
* cbButton»Øμ÷oˉêy
*
**********************************************************************
*/
static void _cbButton_ADD(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
InitDialog_ADD(pMsg);
break;
// case WM_NOTIFY_PARENT:
// Id = WM_GetId(pMsg->hWinSrc);
// NCode = pMsg->Data.v;
// switch (Id)
// {
// case GUI_ID_BUTTON6:
// if(NCode==WM_NOTIFICATION_RELEASED)
// {
// GUI_EndDialog(hWin,0);
// WM_DeleteWindow(pMsg->hWinSrc);
// }
// break;
// }
case WM_DELETE:
GUI_ALLOC_Free(pMsg->hWin);
break;
default:
WM_DefaultProc(pMsg);
}
}
static void _cbButton_PM(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
InitDialog_ADD(pMsg);
break;
case WM_DELETE:
GUI_ALLOC_Free(pMsg->hWin);
break;
default:
WM_DefaultProc(pMsg);
}
}
static void _cbButton_TMP(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
InitDialog_ADD(pMsg);
break;
case WM_DELETE:
GUI_ALLOC_Free(pMsg->hWin);
break;
default:
WM_DefaultProc(pMsg);
}
}
static void _cbButton_HM(WM_MESSAGE * pMsg)
{
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
InitDialog_ADD(pMsg);
break;
case WM_DELETE:
GUI_ALLOC_Free(pMsg->hWin);
break;
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* cbCallback£¨Ö÷½çÃæ£© »Øμ÷oˉêy
*
**********************************************************************
*/
static void _cbCallback(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_PAINT:
PaintDialog_A(pMsg);
break;
case WM_INIT_DIALOG:
InitDialog_A(pMsg);
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch (Id)
{
case GUI_ID_BUTTON0:
if(NCode==WM_NOTIFICATION_RELEASED)
{
GUI_ExecDialogBox(_aButtonCreateA, GUI_COUNTOF(_aButtonCreateA), &_cbButton_ADD, hWin, 0, 0);
}
break;
case GUI_ID_BUTTON1:
if(NCode==WM_NOTIFICATION_RELEASED)
{
GUI_ExecDialogBox(_aButtonCreateP,GUI_COUNTOF(_aButtonCreateP),&_cbButton_PM,hWin,0,0);
}
break;
case GUI_ID_BUTTON2:
if(NCode==WM_NOTIFICATION_RELEASED)
{
GUI_ExecDialogBox(_aButtonCreateT,GUI_COUNTOF(_aButtonCreateT),&_cbButton_TMP,hWin,0,0);
}
break;
case GUI_ID_BUTTON3:
if(NCode==WM_NOTIFICATION_RELEASED)
{
GUI_ExecDialogBox(_aButtonCreateH,GUI_COUNTOF(_aButtonCreateH),&_cbButton_HM,hWin,0,0);
}
break;
}
default:
WM_DefaultProc(pMsg);
}
}
/*********************************************************************
*
* MainTask
*
**********************************************************************
*/
int main(void)
{
SystemInit();
delay_init(72); //Ñóê±3õê¼»ˉ
NVIC_Configuration();
uart_init(9600);
LED_Init();
KEY_Init();
Timerx_Init();
GUI_Init();
WM_SetDesktopColor(GUI_WHITE); /* Automacally update desktop window */
WM_SetCreateFlags(WM_CF_MEMDEV); /* Use memory devices on all windows to avoid flicker */
GUI_ExecDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), &_cbCallback, 0, 0, 0);
while(1)
{
GUI_Exec();
}
}
void upmap(void)
{
//GUI_MEMDEV_Handle item;
//hWnd=WM_CreateWindow(0,0,320,240,WM_CF_SHOW,&_cbBkWindow,0);
//item = GUI_MEMDEV_Create(0,0,320,24);
//GUI_MEMDEV_Select(item);
GUI_SetDrawMode(GUI_DRAWMODE_NORMAL);
GUI_SetBkColor(GUI_WHITE);
GUI_SetFont(&GUI_Font16_ASCII);
GUI_SetColor(0xff0000 + (255 - 200) * 0x101L);
GUI_SetTextMode(GUI_TM_TRANS);
GUI_DrawBitmap(&bm3,0,0);
GUI_DispStringAt("kn", 40, 5);
//GUI_MEMDEV_CopyToLCDAA(item);
//GUI_MEMDEV_Delete(item);
} |
|