硬汉嵌入式论坛

 找回密码
 立即注册
查看: 420|回复: 8
收起左侧

[emWin] GUI_EndDialog函数,里面附带的参数传哪里去了?

[复制链接]

22

主题

47

回帖

113

积分

初级会员

积分
113
发表于 2023-5-9 15:23:06 | 显示全部楼层 |阅读模式
stemwin的GUI_EndDialog函数,里面附带的参数是哪里可以收到?
我在WM_DELETE的参数里面看了一下pMsg->Data.v这个值是没有收到赋值的。。
各位大佬帮忙解答一下

GUI_EndDialog

GUI_EndDialog
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-5-9 16:15:05 | 显示全部楼层
本帖最后由 caicaptain2 于 2023-5-9 16:21 编辑

GUI_ExecCreatedDialog(hDialog); 是这个函数的返回值。

下面是我做的一个密码输入对话框的函数。 密码正确,就返回0,取消就返回1. 就是利用gui_endialog里面的数值来传递的。
[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;

}

回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-5-9 16:23:16 | 显示全部楼层
caicaptain2 发表于 2023-5-9 16:15
GUI_ExecCreatedDialog(hDialog); 是这个函数的返回值。

下面是我做的一个密码输入对话框的函数。 密码 ...

Snipaste_2023-05-09_16-22-41.png
回复

使用道具 举报

22

主题

47

回帖

113

积分

初级会员

积分
113
 楼主| 发表于 2023-5-9 16:45:52 | 显示全部楼层
caicaptain2 发表于 2023-5-9 16:15
GUI_ExecCreatedDialog(hDialog); 是这个函数的返回值。

下面是我做的一个密码输入对话框的函数。 密码 ...

我在回调函数里面调用不了GUI_ExecCreatedDialog。。。。直接会挂掉
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-5-9 16:53:49 | 显示全部楼层
本帖最后由 caicaptain2 于 2023-5-9 16:55 编辑
熊大 发表于 2023-5-9 16:45
我在回调函数里面调用不了GUI_ExecCreatedDialog。。。。直接会挂掉

GUI_ExecCreatedDialog 这个函数里面的有个单词是created。必须先创建一个对话框,得到句柄,才能用这个。
你可以研究一下我贴的那个密码对话框的用法。
回复

使用道具 举报

22

主题

47

回帖

113

积分

初级会员

积分
113
 楼主| 发表于 2023-5-9 17:02:33 | 显示全部楼层
caicaptain2 发表于 2023-5-9 16:53
GUI_ExecCreatedDialog 这个函数里面的有个单词是created。必须先创建一个对话框,得到句柄,才能用这个 ...

我用的这个GUI_ExecDialogBox,在回调函数中使用这个 会直接锁死掉
回复

使用道具 举报

22

主题

47

回帖

113

积分

初级会员

积分
113
 楼主| 发表于 2023-5-9 17:13:47 | 显示全部楼层
caicaptain2 发表于 2023-5-9 16:15
GUI_ExecCreatedDialog(hDialog); 是这个函数的返回值。

下面是我做的一个密码输入对话框的函数。 密码 ...

那如果我用非阻塞式的对话框,想要获取其结束返回的句柄,是不是没有现成的方案?比如只能通过自定义一个消息类型,套一层自定义的消息类型,然后在这个里面去结束对话框?
回复

使用道具 举报

22

主题

47

回帖

113

积分

初级会员

积分
113
 楼主| 发表于 2023-5-9 17:13:58 | 显示全部楼层
caicaptain2 发表于 2023-5-9 16:15
GUI_ExecCreatedDialog(hDialog); 是这个函数的返回值。

下面是我做的一个密码输入对话框的函数。 密码 ...

那如果我用非阻塞式的对话框,想要获取其结束返回的句柄,是不是没有现成的方案?比如只能通过自定义一个消息类型,套一层自定义的消息类型,然后在这个里面去结束对话框?
回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-5-10 11:42:05 | 显示全部楼层
熊大 发表于 2023-5-9 17:13
那如果我用非阻塞式的对话框,想要获取其结束返回的句柄,是不是没有现成的方案?比如只能通过自定义一个 ...

Snipaste_2023-05-10_11-40-39.png

如果是非阻塞式,可以在对话框的WM_DELETE这个消息中把值传递出来。 比如用个全局变量,任务通知什么的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 18:08 , Processed in 0.276467 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表