|
话不多说,直接上代码:
#include "includes.h"
#include "string.h"
#include "stdio.h"
/*********************************************************************
*
* Defines
*
**********************************************************************
*/
#define ID_WINDOW_0 (GUI_ID_USER + 0x04)
#define MSG_CHANGE_TEXT (WM_USER + 0)
#define ID_BUTTON_0 (GUI_ID_USER + 0x01)
#define ID_BUTTON_1 (GUI_ID_USER + 0x02)
#define ID_TEXT_0 (GUI_ID_USER + 0x03)
#define ID_FRAMEWIN_1 (GUI_ID_USER + 0x00)
#define ID_BUTTON_2 (GUI_ID_USER + 0x01)
#define ID_BUTTON_3 (GUI_ID_USER + 0x02)
#define ID_BUTTON_4 (GUI_ID_USER + 0x05)
#define ID_TEXT_1 (GUI_ID_USER + 0x03)
#define ID_TIMER_WATCH0 (GUI_ID_USER + 0x08)
#define ID_TIMER_WATCH1 (GUI_ID_USER + 0x09)
#define ID_TIMER_WATCH2 (GUI_ID_USER + 0x10)
#define ID_TIMER_WATCH3 (GUI_ID_USER + 0x11)
#define ID_FRAMEWIN_0 (GUI_ID_USER + 0x2B)
#define CHANNEL_NUM 32
static int GA_START_FLAG=0,
GB_START_FLAG=0,
FLAG_STOP_A=0,
FLAG_STOP_B=0;
/*********************************************************************
*
* Static data
*
**********************************************************************
*/
static WM_HWIN hPage1,hPage2;
/*********************************************************************
*
* _aDialogCheck
*/
static const GUI_WIDGET_CREATE_INFO _aDialogCheck[] = {
{ FRAMEWIN_CreateIndirect, "Group", ID_FRAMEWIN_1, 0, 0, 800, 480, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "START", ID_BUTTON_2, 710, 10, 80, 130, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "STOP", ID_BUTTON_3, 710, 145, 80, 130, 0, 0x0, 0 },
{ BUTTON_CreateIndirect, "BACK", ID_BUTTON_4, 710, 280, 80, 130, 0, 0x0, 0 },
{ MULTIPAGE_CreateIndirect, "Multipage", GUI_ID_MULTIPAGE0, 0, 0, 700, 412, 0, 0x0, 0 },
};
static const GUI_WIDGET_CREATE_INFO _aDialogCreate1[] = {
{ WINDOW_CreateIndirect, "A", 0, 0, 0, 700, 415, 0 },
{ LISTVIEW_CreateIndirect, " ", GUI_ID_LISTVIEW0, 0,0, 520, 430, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "AGE A", GUI_ID_TEXT0, 571, 274, 80, 20, 0, 0x0, 0 },
};
#if CHANNEL_NUM > 8
static const GUI_WIDGET_CREATE_INFO _aDialogCreate2[] = {
{ WINDOW_CreateIndirect, "B", 0, 0, 0, 700, 415, 0 },
{ LISTVIEW_CreateIndirect, "", GUI_ID_LISTVIEW1, 0,0, 520, 430, 0, 0x0, 0 },
{ TEXT_CreateIndirect, "AGE B", GUI_ID_TEXT1, 571, 274, 80, 20, 0, 0x0, 0 },
};
#endif
static void _cbDialogPage1(WM_MESSAGE * pMsg) {
WM_HWIN hWin,hListView;
HEADER_Handle hHeader;
hWin = pMsg->hWin;
hPage1 = hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
WM_SetFocus(hWin);
//
//A×éμÄ8¸öí¨μà¼ì2aáD±í
//
hListView = WM_GetDialogItem(hWin,GUI_ID_LISTVIEW0);
LISTVIEW_SetTextAlign(hListView, 0 , GUI_TA_CENTER | GUI_TA_VCENTER);
hHeader = LISTVIEW_GetHeader(hListView);
HEADER_SetHeight(hHeader, 48);
LISTVIEW_AddColumn(hListView, 172, "CHANNEL", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hListView, 172, "ABS", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hListView, 172, "STATUS", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_SetBkColor(hListView, 0, GUI_YELLOW);
LISTVIEW_SetGridVis(hListView, 1);
LISTVIEW_SetRowHeight(hListView, 46);
break;
case WM_PAINT:
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
break;
case WM_TOUCH_CHILD://μã»÷±à¼-¿òDT¸ÄÎÄ×Ö
break;
case WM_NOTIFY_PARENT:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
#if CHANNEL_NUM > 8
//B×é½çÃæ
static void _cbDialogPage2(WM_MESSAGE * pMsg) {
WM_HWIN hWin,hListView;
HEADER_Handle hHeader;
hWin = pMsg->hWin;
hPage2 = hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
//B×éμÄ8¸öí¨μà¼ì2aáD±í
//
hListView = WM_GetDialogItem(hWin,GUI_ID_LISTVIEW1);
LISTVIEW_SetTextAlign(hListView, 0 , GUI_TA_CENTER | GUI_TA_VCENTER);
hHeader = LISTVIEW_GetHeader(hListView);
HEADER_SetHeight(hHeader, 48);
LISTVIEW_AddColumn(hListView, 172, "CHANNEL", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hListView, 172, "ABS", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_AddColumn(hListView, 172, "STATUS", GUI_TA_CENTER | GUI_TA_VCENTER);
LISTVIEW_SetBkColor(hListView, 0, GUI_YELLOW);
LISTVIEW_SetGridVis(hListView, 1);
LISTVIEW_SetRowHeight(hListView, 46);
break;
case WM_TOUCH_CHILD:
break;
case WM_PAINT:
GUI_SetBkColor(GUI_GREEN);
GUI_Clear();
break;
case WM_NOTIFY_PARENT:
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
#endif
/*********************************************************************
*
* _cbDialog
*/
static void _cbDialogCheck(WM_MESSAGE * pMsg)
{
WM_HWIN hDialog;
int NCode;
int Id,sel;
WM_HWIN hWin,hItem;
hWin = pMsg->hWin;
switch (pMsg->MsgId) {
case WM_INIT_DIALOG:
//
// Initialization of 'Framewin'
//
FRAMEWIN_SetTitleHeight(hWin, 30);
FRAMEWIN_SetTextAlign(hWin, GUI_TA_HCENTER | GUI_TA_VCENTER);
FRAMEWIN_SetBarColor(hWin, 0, GUI_BLUE);
FRAMEWIN_SetBarColor(hWin, 1, GUI_BLUE);
WM_MakeModal(hWin);
//
// Initialization of 'Multipage'
//
hItem = WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0);
//
// Create and attach the MULTIPAGE dialog windows
//
hDialog = GUI_CreateDialogBox(_aDialogCreate1, GUI_COUNTOF(_aDialogCreate1), _cbDialogPage1, WM_UNATTACHED, 0, 0);
MULTIPAGE_AddPage(hItem, hDialog, " A ");
#if CHANNEL_NUM > 8
hDialog = GUI_CreateDialogBox(_aDialogCreate2, GUI_COUNTOF(_aDialogCreate2), _cbDialogPage2, WM_UNATTACHED, 0, 0);
MULTIPAGE_AddPage(hItem, hDialog, " B ");
#endif
MULTIPAGE_SelectPage(hItem, 0);
MULTIPAGE_SetAlign(hItem, MULTIPAGE_ALIGN_LEFT | MULTIPAGE_ALIGN_BOTTOM);
break;
case WM_PAINT:
GUI_SetBkColor(GUI_GRAY);
GUI_Clear();
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc);
NCode = pMsg->Data.v;
switch(Id) {
case ID_BUTTON_2: //
printf("¿aê¼±»μã»÷áË\r\n");
switch(NCode) {
case WM_NOTIFICATION_RELEASED:
sel = MULTIPAGE_GetSelection(WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0));
switch(sel){
case 0://A?
/**/
{//疑问处1:此处大括号内的内容
if(GA_START_FLAG == 1)
{
printf("A×éòѾ-¿aê¼\r\n");
printf("sel _GA_START_FLAG =%d _GB_START_FLAG =%d \r\n", GA_START_FLAG, GB_START_FLAG);
}
else
{
printf("A×é¿aê¼±»μã»÷áË\r\n");
GA_START_FLAG = 1;
}
}
break;
case 1://B?
break;
}
/**/
{//疑问处2:此处大括号内的内容
while((GA_START_FLAG==1) || (GB_START_FLAG==1) )
{
printf("ÎòÔú¼ì2a°¡...\r\n");
printf("while _GA_START_FLAG =%d _GB_START_FLAG =%d \r\n", GA_START_FLAG, GB_START_FLAG);
GUI_Delay(1000);
}
}
break;
}
break;
case ID_BUTTON_3: //
switch(NCode) {
case WM_NOTIFICATION_RELEASED:
sel = MULTIPAGE_GetSelection(WM_GetDialogItem(hWin, GUI_ID_MULTIPAGE0));
switch(sel)
{
case 0:
GA_START_FLAG = 0;
FLAG_STOP_A = 1;
break;
case 1:
GB_START_FLAG = 0;
FLAG_STOP_B = 1;
break;
}
}
break;
case ID_BUTTON_4: //
switch(NCode) {
case WM_NOTIFICATION_RELEASED:
if((GA_START_FLAG==0) && (GB_START_FLAG==0) ){
GUI_EndDialog(hWin, 0);
hPage1=0;hPage2=0;
}
break;
}
break;
}
break;
default:
WM_DefaultProc(pMsg);
break;
}
}
/*********************************************************************
*
* Public code
*
**********************************************************************
*/
void MainTask(void) {
GUI_Init();
WM_EnableMemdev(WM_HBKWIN);
WM_SetCallback(WM_HBKWIN, &_cbDialogCheck); /* Use own callback routine for background window */
GUI_CreateDialogBox(_aDialogCheck, GUI_COUNTOF(_aDialogCheck), _cbDialogCheck, 0, 0, 0);
while (1) {
GUI_Exec();
}
}
/*************************** End of file ****************************/
界面效果如图:
运行效果
君请看,疑问处1和疑问处2都是只是操作了定义的两个全局标志,如果就上面的代码运行后,点击START按钮6次!固定的6次!后进入HardFault_Handler,经测试屏蔽疑问处2的代码后点击START按钮无异常,我觉得这就关系到emWin的回调机制了!
问:在回调函数里面能使用while吧,我有个其他界面的回调就是用的while也没出现问题啊,可是这一个我再解决不了啦,求助大咖如何搞正常啦!!!!?
再附个件,方便大家给运行测试!
HelloWorld.zip
(3 KB, 下载次数: 50)
|
|