[C] 纯文本查看 复制代码
/*******************************************************/
//自定义消息框,含确认和取消按钮,密码输入框,模态对话框,只有点击确认或者取消后才会执行后续程序。
//pFONT可以设定消息框的字体,x0,y0为对话框的显示位置。默认父窗口为 WM_HBKWIN。
// 消息框点击了“确认”后,返回值为0; 点击了“取消”后,返回值为1.
//
/********************************************************/
//回调函数
static void _cbPassword(WM_MESSAGE * pMsg)
{
int NCode, Id;
WM_HWIN hWin, hItem ;
hWin=pMsg->hWin;
switch (pMsg->MsgId)
{
case WM_INIT_DIALOG:
break;
case WM_KEY:
switch (((WM_KEY_INFO*)(pMsg->Data.p))->Key)
{
case GUI_KEY_ESCAPE:
GUI_EndDialog(hWin,1);
break;
case GUI_KEY_RIGHT:
//GUI_SendKeyMsg(GUI_KEY_TAB,1);
WM_SetFocus(WM_GetDialogItem(pMsg->hWin,ID_BUTTON_YES));
break;
case GUI_KEY_LEFT:
//GUI_SendKeyMsg(GUI_KEY_TAB,1);
WM_SetFocus(WM_GetDialogItem(pMsg->hWin,ID_BUTTON_NO));
break;
case GUI_KEY_DOWN:
//GUI_SendKeyMsg(GUI_KEY_TAB,1);
WM_SetFocus(WM_GetDialogItem(pMsg->hWin,ID_BUTTON_YES));
break;
case GUI_KEY_UP:
//GUI_SendKeyMsg(GUI_KEY_TAB,1);
WM_SetFocus(WM_GetDialogItem(pMsg->hWin,ID_EDIT_PASSWORD));
break;
}
break;
case WM_NOTIFY_PARENT:
Id = WM_GetId(pMsg->hWinSrc); /* Id of widget */
NCode = pMsg->Data.v; /* Notification code */
switch (Id)
{
case ID_BUTTON_YES:
switch (NCode)
{
case WM_NOTIFICATION_CLICKED:
hItem = WM_GetDialogItem(pMsg->hWin, ID_EDIT_PASSWORD);
if((UserData.Password==EDIT_GetValue(hItem))||DEFAULTPASSWORD==EDIT_GetValue(hItem))
{
if (FacCon.Language==0) TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_CONFIRM),"密码正确");
else if (FacCon.Language==1) TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_CONFIRM),"Correct!");
GUI_EndDialog(hWin,0); //如果密码符合,关闭窗口,返回0
}
else
{
if (FacCon.Language==0) TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_CONFIRM),"密码错误!");
else if (FacCon.Language==1) TEXT_SetText(WM_GetDialogItem(pMsg->hWin, ID_TEXT_CONFIRM),"Wrong!");
//GUI_EndDialog(hWin,1);
} //如果密码不对,
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:/* Selection changed */
break;
}
break;
case ID_BUTTON_NO:
switch(NCode)
{
case WM_NOTIFICATION_CLICKED:
GUI_EndDialog(hWin,1);
break;
case WM_NOTIFICATION_RELEASED:
break;
case WM_NOTIFICATION_SEL_CHANGED:/* Selection changed */
break;
}
break;
case ID_EDIT_PASSWORD:
switch(NCode)
{
case WM_NOTIFICATION_CONFIRM:
break;
case WM_NOTIFICATION_CANCEL:
break;
}
break;
}
break;
case WM_PAINT:
GUI_SetBkColor(GUI_LIGHTGRAY);
GUI_Clear();
GUI_SetColor(GUI_DARKBLUE);
break;
default:
WM_DefaultProc(pMsg);
break;
}
};
int16_t User_CreateMessageBoxPassword(const char * sMessage,const char *sCaption, const GUI_FONT * pFont,int16_t x0, int16_t y0)
{
int16_t i=0;
WM_HWIN hDialog;
WM_HWIN hButtonYes, hButtonNo,hText, hEdit;
hDialog= GUI_CreateDialogBox(_PasswordCreate,GUI_COUNTOF(_PasswordCreate),_cbPassword,WM_HBKWIN,x0,y0);
hButtonYes = WM_GetDialogItem(hDialog, ID_BUTTON_YES);
hButtonNo = WM_GetDialogItem(hDialog, ID_BUTTON_NO);
hText=WM_GetDialogItem(hDialog, ID_TEXT_CONFIRM);
//hEdit= WM_GetDialogItem(hDialog, ID_EDIT_PASSWORD);
FRAMEWIN_SetFont(hDialog, pFont);
FRAMEWIN_SetText(hDialog, sCaption);
FRAMEWIN_SetTextColor(hDialog, GUI_RED);
FRAMEWIN_SetTitleHeight(hDialog, 30);
FRAMEWIN_SetTextAlign(hDialog, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetFont(hText, pFont);
TEXT_SetTextAlign(hText, GUI_TA_HCENTER | GUI_TA_VCENTER);
TEXT_SetTextColor(hText, 0x00FF0000);
TEXT_SetText(hText,sMessage);
BUTTON_SetFont(hButtonYes, pFont);
BUTTON_SetFont(hButtonNo,pFont);
if(FacCon.Language==0)
{
BUTTON_SetText(hButtonYes, "确认");
BUTTON_SetText(hButtonNo, "取消");
}
else if(FacCon.Language==1)
{
BUTTON_SetText(hButtonYes, "OK");
BUTTON_SetText(hButtonNo, "Cancel");
}
//加入密码显示和修改EDIT控件
hEdit = WM_GetDialogItem(hDialog, ID_EDIT_PASSWORD);
EDIT_SetDecMode(hEdit,0000,0,9999,0,0);
EDIT_SetFont(hEdit, pFont);
EDIT_SetTextColor(hEdit, EDIT_CI_ENABLED, 0x00FF0000);
EDIT_SetTextAlign(hEdit, GUI_TA_HCENTER | GUI_TA_VCENTER);
// WM_DisableWindow(hEdit);
WM_SetCallback(hEdit, User_EDIT_Callback); //设定自定义的EDIT回调函数
WM_SetFocus(hEdit);
i= GUI_ExecCreatedDialog(hDialog);
return i;
}