硬汉嵌入式论坛

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

[emWin] 创建非阻塞式对话框,对资源数目和类型有限制么

[复制链接]

38

主题

91

回帖

205

积分

高级会员

积分
205
发表于 2018-5-10 15:00:21 | 显示全部楼层 |阅读模式
创建非阻塞式对话框GUI_CreateDialogBox,对资源数目和类型有限制么?

回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-10 15:02:08 | 显示全部楼层
创建8个下拉框,8个文本框,14个编辑框,没有问题,再多创建2个编辑框就死机,这是咋回事?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-10 15:03:04 | 显示全部楼层
如果使用了RTOS,加上此任务的栈空间即可。
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-10 15:55:14 | 显示全部楼层
该任务栈空间由2M修改为4M,还是会死机
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-10 16:36:12 | 显示全部楼层
使用的是freertos,是emwin问题还是freertos问题?
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-10 17:00:09 | 显示全部楼层
gui内存为14m,VRAM内存为2m,界面任务栈为8k,资源应该足够了,为何还是创建32个以上小工具就会死掉?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-11 00:19:53 | 显示全部楼层
xiaolun217001 发表于 2018-5-10 17:00
gui内存为14m,VRAM内存为2m,界面任务栈为8k,资源应该足够了,为何还是创建32个以上小工具就会死掉?

方便的话,直接上GUI部分的代码,我操作一下看看,是不是程序有问题。
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-11 15:09:40 | 显示全部楼层
本帖最后由 xiaolun217001 于 2018-5-11 15:12 编辑

#define ID_WINDOW_0 (GUI_ID_USER + 0x00)
#define ID_DROPDOWN_0 (GUI_ID_USER + 0x01)
#define ID_DROPDOWN_1 (GUI_ID_USER + 0x02)
#define ID_DROPDOWN_2 (GUI_ID_USER + 0x03)
#define ID_DROPDOWN_3 (GUI_ID_USER + 0x04)
#define ID_DROPDOWN_4 (GUI_ID_USER + 0x05)
#define ID_DROPDOWN_5 (GUI_ID_USER + 0x06)
#define ID_DROPDOWN_6 (GUI_ID_USER + 0x07)
#define ID_DROPDOWN_7 (GUI_ID_USER + 0x08)

#define ID_TEXT_0 (GUI_ID_USER + 0x0b)
#define ID_TEXT_1 (GUI_ID_USER + 0x0c)
#define ID_TEXT_2 (GUI_ID_USER + 0x0d)
#define ID_TEXT_3 (GUI_ID_USER + 0x0e)
#define ID_TEXT_4 (GUI_ID_USER + 0x0f)
#define ID_TEXT_5 (GUI_ID_USER + 0x10)
#define ID_TEXT_6 (GUI_ID_USER + 0x11)
#define ID_TEXT_7 (GUI_ID_USER + 0x12)

#define ID_EDIT_0 (GUI_ID_USER + 0x18)
#define ID_EDIT_1 (GUI_ID_USER + 0x19)
#define ID_EDIT_2 (GUI_ID_USER + 0x1a)
#define ID_EDIT_3 (GUI_ID_USER + 0x1b)
#define ID_EDIT_4 (GUI_ID_USER + 0x1c)
#define ID_EDIT_5 (GUI_ID_USER + 0x1d)
#define ID_EDIT_6 (GUI_ID_USER + 0x1e)
#define ID_EDIT_7 (GUI_ID_USER + 0x1f)

#define ID_EDIT_8 (GUI_ID_USER + 0x20)
#define ID_EDIT_9 (GUI_ID_USER + 0x21)
#define ID_EDIT_10 (GUI_ID_USER + 0x22)
#define ID_EDIT_11 (GUI_ID_USER + 0x23)
#define ID_EDIT_12 (GUI_ID_USER + 0x24)
#define ID_EDIT_13 (GUI_ID_USER + 0x25)
#define ID_EDIT_14 (GUI_ID_USER + 0x26)
#define ID_EDIT_15 (GUI_ID_USER + 0x27)

#define ID_EDIT_16 (GUI_ID_USER + 0x28)
#define ID_EDIT_17 (GUI_ID_USER + 0x29)
#define ID_EDIT_18 (GUI_ID_USER + 0x2a)
#define ID_EDIT_19 (GUI_ID_USER + 0x2b)
#define ID_EDIT_20 (GUI_ID_USER + 0x2c)
#define ID_EDIT_21 (GUI_ID_USER + 0x2d)
#define ID_EDIT_22 (GUI_ID_USER + 0x2e)
#define ID_EDIT_23 (GUI_ID_USER + 0x2f)

#define ID_EDIT_24 (GUI_ID_USER + 0x28)
#define ID_EDIT_25 (GUI_ID_USER + 0x29)
#define ID_EDIT_26 (GUI_ID_USER + 0x2a)
#define ID_EDIT_27 (GUI_ID_USER + 0x2b)
#define ID_EDIT_28 (GUI_ID_USER + 0x2c)
#define ID_EDIT_29 (GUI_ID_USER + 0x2d)
#define ID_EDIT_30 (GUI_ID_USER + 0x2e)
#define ID_EDIT_31 (GUI_ID_USER + 0x2f)

#define ID_BUTTON_0 (GUI_ID_USER + 0x31)
#define ID_BUTTON_1 (GUI_ID_USER + 0x32)
#define ID_BUTTON_2 (GUI_ID_USER + 0x33)
#define ID_BUTTON_3 (GUI_ID_USER + 0x34)
#define ID_BUTTON_4 (GUI_ID_USER + 0x35)
#define ID_BUTTON_5 (GUI_ID_USER + 0x36)
#define ID_BUTTON_6 (GUI_ID_USER + 0x37)
#define ID_BUTTON_7 (GUI_ID_USER + 0x38)
#define ID_BUTTON_8 (GUI_ID_USER + 0x39)
#define ID_BUTTON_9 (GUI_ID_USER + 0x40)
#define ID_BUTTON_10 (GUI_ID_USER + 0x41)
#define ID_BUTTON_11 (GUI_ID_USER + 0x42)
#define ID_BUTTON_12 (GUI_ID_USER + 0x43)
#define ID_BUTTON_13 (GUI_ID_USER + 0x44)
#define ID_BUTTON_14 (GUI_ID_USER + 0x45)
#define ID_BUTTON_15 (GUI_ID_USER + 0x46)

#define ID_PROGBAR_0 (GUI_ID_USER + 0x47)

static const GUI_WIDGET_CREATE_INFO _aDialogCreate[] =
{
    { WINDOW_CreateIndirect, "Window", ID_WINDOW_0, 0, 0, 800, 450, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_0, 40, 90, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_1, 40, 129, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_2, 40, 168, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_3, 40, 207, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_4, 40, 246, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_5, 40, 285, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_6, 40, 324, 80, 55, 0, 0x0, 0 },
    { DROPDOWN_CreateIndirect, "Dropdown", ID_DROPDOWN_7, 40, 363, 80, 55, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_0, 10, 90, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_1, 10, 129, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_2, 10, 168, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_3, 10, 207, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_4, 10, 246, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_5, 10, 285, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_6, 10, 324, 20, 28, 0, 0x0, 0 },
    { TEXT_CreateIndirect, " ", ID_TEXT_7, 10, 363, 20, 28, 0, 0x0, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_0, 130, 90, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_1, 130, 129, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_2, 130, 168, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_3, 130, 207, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_4, 130, 246, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_5, 130, 285, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_6, 130, 324, 100, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_7, 130, 363, 100, 30, 0, 0x10, 0 },
   
    { EDIT_CreateIndirect, "Edit", ID_EDIT_8, 250, 90, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_9, 250, 129, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_10, 250, 168, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_11, 250, 207, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_12, 250, 246, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_13, 250, 285, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_14, 250, 324, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_15, 250, 363, 40, 30, 0, 0x10, 0 },
   
    { EDIT_CreateIndirect, "Edit", ID_EDIT_16, 310, 90, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_17, 310, 129, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_18, 310, 168, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_19, 310, 207, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_20, 310, 246, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_21, 310, 285, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_22, 310, 324, 40, 30, 0, 0x10, 0 },
    { EDIT_CreateIndirect, "Edit", ID_EDIT_23, 310, 363, 40, 30, 0, 0x10, 0 },

    { PROGBAR_CreateIndirect, "Progbar", ID_PROGBAR_0, 0, 445, 800, 5, 0, 0x0, 0 },
};

static void _cbDialog(WM_MESSAGE * pMsg)
{
    volatile WM_HWIN hItem;
    int     NCode, nSizeX;
    int     Id;
    int     i,j;

    switch (pMsg->MsgId)
    {
        case WM_INIT_DIALOG:
            hItem = pMsg->hWin;
            for(i = 0; i < 8; i++)
            {
                hItem = WM_GetDialogItem(pMsg->hWin, ID_TEXT_0+i);
                (void)sprintf(&dispbuf[0],"%02d", i+1);
                TEXT_SetTextAlign(hItem, GUI_TA_HCENTER | GUI_TA_VCENTER);
                TEXT_SetText(hItem, dispbuf);
            
                hItem = WM_GetDialogItem(pMsg->hWin, ID_DROPDOWN_0+i);
                DROPDOWN_SetBkColor(hItem,DROPDOWN_CI_UNSEL,GUI_WHITE);
                DROPDOWN_SetAutoScroll(hItem,0);
                DROPDOWN_SetFont(hItem,&XBF_Font24);
                DROPDOWN_SetItemSpacing(hItem,5);
                DROPDOWN_SetTextHeight(hItem,28);
                DROPDOWN_SetTextAlign(hItem,GUI_TA_LEFT|GUI_TA_VCENTER);
                DROPDOWN_InsertString(hItem,"in",0);
                DROPDOWN_InsertString(hItem,"out",1);
            }
            
            hItem = WM_GetDialogItem(pMsg->hWin, ID_PROGBAR_0);
            PROGBAR_SetText(hItem, " ");
            PROGBAR_SetMinMax(hItem, 0, DEF_WAITKEYTIME);
            break;
        case WM_NOTIFY_PARENT:
            break;
        case WM_PAINT:
            nSizeX = WM_GetWindowSizeX(pMsg->hWin);
            GUI_DrawGradientV(0, 0, nSizeX, 15, DEF_TITLEBACKCOLORUP0, DEF_TITLEBACKCOLORUP1);
            GUI_DrawGradientV(0, 15, nSizeX, 25, DEF_TITLEBACKCOLORDOWN0, DEF_TITLEBACKCOLORDOWN1);
            GUI_DrawGradientV(0, 425, nSizeX, 445, 0x80C8C7C9, 0x80C8C7C9);
            GUI_DrawGradientV(5, 80, 400, 410, GUI_WHITE, GUI_WHITE);
            break;
        case WM_KEY:
            break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}

WM_HWIN Formula(void)
{
    WM_HWIN hWin;
    hWin = GUI_CreateDialogBox(_aDialogCreate, GUI_COUNTOF(_aDialogCreate), _cbDialog, WM_HBKWIN, 0, 0);
    WM_MakeModal(hWin);
    return hWin;
}
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-11 15:10:27 | 显示全部楼层
本帖最后由 xiaolun217001 于 2018-5-11 15:12 编辑

只要调用Formula()就会死掉
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-12 01:08:00 | 显示全部楼层
xiaolun217001 发表于 2018-5-11 15:10
只要调用Formula()就会死掉

基本可以确定是你程序模板的问题,这里是我在我们V6板子上面的测试,触摸什么的都正常。
QQ截图20180512010457.png
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-16 10:19:44 | 显示全部楼层
问题找到了,是应用层代码问题
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-16 10:26:50 | 显示全部楼层
另外,发现个问题
case WM_NOTIFY_PARENT:
{
    Id    = WM_GetId(pMsg->hWinSrc);
    NCode = pMsg->Data.v;
    switch(Id)
    {
        case 0:
        {
            switch(NCode)
            {
                case WM_NOTIFICATION_CHILD_DELETED:
                {
                    if(WM_IsWindow(FocusWin))
                    {
                        WM_SetFocus(FocusWin);
                    }
                }break;
            }
        }break;
    }
}
增加如下代码后,点击下拉框就会死机,不知道为啥
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-17 00:41:53 | 显示全部楼层
xiaolun217001 发表于 2018-5-16 10:26
另外,发现个问题
case WM_NOTIFY_PARENT:
{

这个是增加到哪里的代码。
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-17 11:13:39 | 显示全部楼层
case WM_NOTIFY_PARENT:
           //这个地方
            break;
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-18 01:39:04 | 显示全部楼层
QQ截图20180518013858.png
回复

使用道具 举报

38

主题

91

回帖

205

积分

高级会员

积分
205
 楼主| 发表于 2018-5-18 10:59:49 | 显示全部楼层
为啥,如果不用下拉控件,就没有问题,这个消息是删除子窗口时发送的,应该是emwin本身填写的
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-5-19 01:32:22 | 显示全部楼层
xiaolun217001 发表于 2018-5-18 10:59
为啥,如果不用下拉控件,就没有问题,这个消息是删除子窗口时发送的,应该是emwin本身填写的

对应控件处理对应的消息。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-16 14:44 , Processed in 0.423887 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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