|
目前遇到这么一个问题,我首先创建了一个主界面,上面有几个几个btn。然后分别点进去,就切换到相应界面,每个新的界面都是一个 Dialog, 现在的问题是这样。
我主界面如果只是单独和A界面来回切换,那么是没有问题的。 如果主界面只是单独个B界面进行切换,那也是没问题的。但是如果主界面先和A界面切换后,再切换到主界面再切换到B界面的时候,就会直接死机,B界面根本返回不了了。我debug发现,只要先切换A,再切换到B,直接进硬件中断啊,尼玛。 更奇怪的是,如果我主界面先和B界面切换,再和A切换,压根没问题啊。我去。。 求版主帮忙解决一下啊。、
下面是代码。
主界面:
#include "mygui.h"
#include "myguiconfig.h"
int _x;
BUTTON_Handle Btnhandle[6]={0};
static void _callback(WM_MESSAGE *pMsg)
{
int NCode, Id;//Get the ID of buttons and Notification code
WM_SCROLL_STATE ScrollState; //scrollbar handle
SCROLLBAR_Handle hScroll;
WM_HWIN hWin = pMsg->hWin;
switch(pMsg->MsgId)
{
case WM_CREATE:
hScroll = SCROLLBAR_CreateAttached(hWin,0);//the scrollbar is attached to desktop window vertical
SCROLLBAR_SetNumItems(hScroll,50);
SCROLLBAR_SetPageSize(hScroll,25); //Pagesize must be smaller than NumItems.
Btnhandle[0] = BUTTON_CreateEx(5, 5, 105, 105,hWin, WM_CF_SHOW,0,GUI_ID_DataShow );//ÐèÒª´«ÈëÒ»¸ö¸¸´°¿ÚµÄ¾ä±ú½øÈ¥
Btnhandle[1] = BUTTON_CreateEx(115, 5, 105, 105,hWin,WM_CF_SHOW,0,GUI_ID_DataCapture );
Btnhandle[2] = BUTTON_CreateEx(5, 115, 215, 105,hWin, WM_CF_SHOW, 0,GUI_ID_Graph);
Btnhandle[3] = BUTTON_CreateEx(225, 5, 105, 215,hWin, WM_CF_SHOW, 0,GUI_ID_Calculator );
Btnhandle[4] = BUTTON_CreateEx(445, 5, 105, 105,hWin,WM_CF_SHOW, 0,GUI_ID_Info);
Btnhandle[5] = BUTTON_CreateEx(335,5, 105, 105, hWin, WM_CF_SHOW,0, GUI_ID_Time );
break;
case WM_PAINT:
GUI_SetBkColor(GUI_BLUE);
GUI_Clear();
break;
case WM_NOTIFY_PARENT:
Id=WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(NCode)
{
case WM_NOTIFICATION_RELEASED:
switch (Id)
{
case GUI_ID_DataShow:
WM_DeleteWindow(hWin);
DataShow();
break;
case GUI_ID_Graph:
break;
case GUI_ID_Info:
WM_DeleteWindow(hWin);
Info();
break;
case GUI_ID_Calculator:
// WM_DeleteWindow(hWin);
// Calculator();
break;
case GUI_ID_DataCapture:
break;
case GUI_ID_Time:
break;
default:
break;
}
break;
case WM_NOTIFICATION_VALUE_CHANGED:
if(WM_GetId(pMsg->hWinSrc)== GUI_ID_HSCROLL)// the message get from horinzontal scrollbar
{
WM_GetScrollState(pMsg->hWinSrc, &ScrollState);
if(_x!=ScrollState.v)
{
int x=0;
for(x=0;x<7;x++)
{
WM_MoveWindow(Btnhandle[x],(_x-ScrollState.v)*10,0);
}
}
_x=ScrollState.v;
}
break;
default:
break;
}
break;
case WM_DELETE:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
void Main_Menu(void)
{
WM_CreateWindow(0,0,LCD_XSIZE,LCD_YSIZE,WM_CF_SHOW,&_callback,0);//Create the desktop window
}
A界面:
#include "Datashow.h"
#define Btn_Ordinate LCD_YSIZE-35
#define BtnGraph_Abscissa LCD_XSIZE-200
#define BtnPause_Abscissa LCD_XSIZE-130
#define BtnBack_Abscissa LCD_XSIZE-60
static const GUI_WIDGET_CREATE_INFO DataCaptureCreate[] =
{
{ FRAMEWIN_CreateIndirect,"Can and Usart Data Display",GUI_DATASHOW_FRAMEWIN,0,0,LCD_XSIZE,LCD_YSIZE,0,0 },// create the father window
{ TEXT_CreateIndirect,"Integer1:",GUI_DATASHOW_INT1,5,5,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer2:",GUI_DATASHOW_INT2,5,25,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer3:",GUI_DATASHOW_INT3,5,45,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer4:",GUI_DATASHOW_INT4,5,65,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer5:",GUI_DATASHOW_INT5,5,85,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer6:",GUI_DATASHOW_INT6,5,105,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer7:",GUI_DATASHOW_INT7,5,125,50,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Integer8:",GUI_DATASHOW_INT8,5,145,50,20,0,GUI_TA_RIGHT },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT1, 55, 2, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT2, 55, 22, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT3, 55, 42, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT4, 55, 62, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT5, 55, 82, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT6, 55, 102, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT7, 55, 122, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT8, 55, 142, 80, 20, 0, 50 },
{ TEXT_CreateIndirect,"Float1:",GUI_DATASHOW_Float1, 140,5,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float2:",GUI_DATASHOW_Float2, 140,25,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float3:",GUI_DATASHOW_Float3, 140,45,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float4:",GUI_DATASHOW_Float4, 140,65,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float5:",GUI_DATASHOW_Float5, 140,85,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float6:",GUI_DATASHOW_Float6, 140,105,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float7:",GUI_DATASHOW_Float7, 140,125,35,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"Float8:",GUI_DATASHOW_Float8, 140,145,35,20,0,GUI_TA_RIGHT },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT11, 175, 2, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT12, 175, 22, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT13, 175, 42, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT14, 175, 62, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT15, 175, 82, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT16, 175, 102, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT17, 175, 122, 80, 20, 0, 50 },
{ EDIT_CreateIndirect, NULL, GUI_DATASHOW_EDIT18, 175, 142, 80, 20, 0, 50 },
{ TEXT_CreateIndirect,"UrtInt1:",GUI_DATASHOW_USART_INT1, 260,5,38,20,0, GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtInt2:",GUI_DATASHOW_USART_INT2, 260,25,38,20,0, GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtInt3:",GUI_DATASHOW_USART_INT3, 260,45,38,20,0, GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtInt4:",GUI_DATASHOW_USART_INT4, 260,65,38,20,0, GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtFlt1:",GUI_DATASHOW_USART_FLT1, 260,85,38,20,0, GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtFlt2:",GUI_DATASHOW_USART_FLT2, 260,105,38,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtFlt3:",GUI_DATASHOW_USART_FLT3, 260,125,38,20,0,GUI_TA_RIGHT },
{ TEXT_CreateIndirect,"UrtFlt4:",GUI_DATASHOW_USART_FLT4, 260,145,38,20,0,GUI_TA_RIGHT },
{ BUTTON_CreateIndirect,"Back", GUI_DATASHOW_BACK, BtnBack_Abscissa, Btn_Ordinate, 50, 20, 0, 0 },
{ BUTTON_CreateIndirect,"ause", GUI_DATASHOW_PAUSE, BtnPause_Abscissa, Btn_Ordinate, 50, 20, 0, 0 },
{ BUTTON_CreateIndirect,"Graph", GUI_DATASHOW_GRAPH, BtnGraph_Abscissa, Btn_Ordinate, 50, 20, 0, 0 },
};
static void _cbDataShow(WM_MESSAGE * pMsg)
{
int NCode;
int Id;
WM_HWIN hDlg = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
BUTTON_SetBkColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_BACK),0,GUI_RED);
BUTTON_SetBkColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_PAUSE),0,GUI_RED);
BUTTON_SetBkColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_GRAPH),0,GUI_RED);
BUTTON_SetTextColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_BACK),0,GUI_BLACK);
BUTTON_SetTextColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_PAUSE),0,GUI_BLACK);
BUTTON_SetTextColor(WM_GetDialogItem(hDlg, GUI_DATASHOW_GRAPH),0,GUI_BLACK);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT1), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT2), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT3), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT4), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT5), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT6), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT7), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT8), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT11), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT12), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT13), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT14), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT15), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT16), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT17), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT18), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT20), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT21), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT22), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT23), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT24), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT25), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT26), GUI_TA_RIGHT);
EDIT_SetTextAlign(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT27), GUI_TA_RIGHT);
EDIT_SetMaxLen(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT1),11);
EDIT_SetMaxLen(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT2),11);
EDIT_SetMaxLen(WM_GetDialogItem(hDlg, GUI_DATASHOW_EDIT15),11);
break;
case WM_TIMER:
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
if(NCode==WM_NOTIFICATION_RELEASED)
{
switch(Id)
{
case GUI_DATASHOW_BACK:
GUI_EndDialog(hDlg, 0);
Main_Menu();
GPIOG->ODR^=GPIO_Pin_6;
break;
case GUI_DATASHOW_PAUSE:
GPIOG->ODR^=GPIO_Pin_6;
break;
case GUI_DATASHOW_GRAPH:
break;
default:
break;
}
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
void DataShow(void)
{
GUI_CreateDialogBox(DataCaptureCreate, GUI_COUNTOF(DataCaptureCreate), &_cbDataShow, 0, 0, 0);
}
B界面:
#include "Includes.h"const char Brief[]={
"Description:\n"
" This program provides some basic functions,su\n"
"ch as CAN Bus and Usart Data Monitoring,Captur\n"
"ing and curve drawing.In addition,I also add som\n"
"e small features in it, as you can see,there are a\n"
"timer and a simple calculator,some times they can\n"
"be useful.In the end, If you use all of them corre\n"
"ctly,They can bring you much convenience.\n"
};
static const GUI_WIDGET_CREATE_INFO InfoCreate[] =
{
{ FRAMEWIN_CreateIndirect,"Swust Robot Team",GUI_INFO_FRAMEWIN,0,0,LCD_XSIZE,LCD_YSIZE,0,0 },
{ TEXT_CreateIndirect,"",GUI_INFO_TEXT,5,0,LCD_XSIZE,LCD_YSIZE-50,0,TEXT_CF_LEFT },
{ BUTTON_CreateIndirect,"Back", GUI_INFO_BACK,LCD_XSIZE-60, LCD_YSIZE-45, 50, 20, 0, 0 },
};
static void _cb_Info(WM_MESSAGE* pMsg)
{
int NCode;
int Id;
WM_HWIN hDlg = pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
FRAMEWIN_SetClientColor(hDlg,GUI_WHITE);
FRAMEWIN_SetTextAlign(hDlg,GUI_TA_HCENTER);
FRAMEWIN_SetFont(hDlg,&GUI_Font16B_ASCII);
TEXT_SetTextColor(WM_GetDialogItem(hDlg, GUI_INFO_TEXT),GUI_BLACK);
TEXT_SetFont(WM_GetDialogItem(hDlg, GUI_INFO_TEXT),&GUI_Font13HB_1);
TEXT_SetText(WM_GetDialogItem(hDlg, GUI_INFO_TEXT),Brief);
BUTTON_SetBkColor(WM_GetDialogItem(hDlg, GUI_INFO_BACK),0,GUI_CYAN);
BUTTON_SetBkColor(WM_GetDialogItem(hDlg, GUI_INFO_BACK),1,GUI_BLUE);
BUTTON_SetText(WM_GetDialogItem(hDlg, GUI_INFO_BACK),"Back");
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
if (NCode == WM_NOTIFICATION_RELEASED)
{
switch (Id)
{
case GUI_INFO_BACK:
GPIOG->ODR^=GPIO_Pin_6;
_x=0;
GUI_EndDialog(hDlg, 0);
Main_Menu();
break;
default:
break;
}
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
void Info(void)
{
GUI_CreateDialogBox(InfoCreate, GUI_COUNTOF(InfoCreate), &_cb_Info, 0, 0, 0);
}
非常简单的3个界面啊,为啥切换回出现这个问题,我也是醉了。、 |
|