硬汉嵌入式论坛

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

[emWin] CHOOSEFILE_Create的例子,摇杆无效像死机,求助

[复制链接]

2

主题

5

回帖

11

积分

新手上路

积分
11
发表于 2016-4-13 00:34:00 | 显示全部楼层 |阅读模式
请教大虾,在以下论坛实例中

/**********************************************************************************************************
*    函 数 名: OnICON0Clicked
*    功能说明: 文件系统管理主函数
*    形    参:pMsg
*    返 回 值: 无
**********************************************************************************************************/
void OnICON00Clicked(uint8_t _ucDriveID){
        。。。
        。。。
    while (OnICON00)
    {
        // 将按钮设置到对话框的上面
        // CHOOSEFILE_SetTopMode(Cnt % 2);
        CHOOSEFILE_SetTopMode(1);
        hWin = CHOOSEFILE_Create(0,            //Handle of parent window.
                                 0,                    //X position in pixels of the  dialog in clie nt coordinates.
                                 0,                    //Y position in pixels of the  dialog in client coordinates.
                                 LCD_GetXSize(),        //X-size of the dialog in pixels.
                                 LCD_GetYSize(),       //Y-size of the dialog in pixels
                                 apDrives,                //Pointer to an array of strings containing the root directories to be used.
                                 GUI_COUNTOF(apDrives),//Number of root directories.
                                 0,                    //Initial index of the root directory to be used.
                                 "File Dialog",        //Title to be shown in the title bar.
                                 0,                    //Additional flags for the FRAMEWIN widget.
                                 &Info);               //Pointer to a CHOOSEFILE_INFO structure.
        CHOOSEFILE_SetButtonText(hWin, CHOOSEFILE_BI_CANCEL, "Close");
        r = GUI_ExecCreatedDialog(hWin);  //替换为GUI_DELAY(20);  并注释掉 "蓝色"部分代码
        // 由 case GUI_ID_OK: GUI_EndDialog(hWin, 0);
        if (r == 0)
        {
            //点击了Archive属性的文件 会进入到这里,也就是说,可以
            //在这里进入图片显示,MP3播放等功能。
            hWin = MESSAGEBOX_Create(Info.pRoot, "File:", 0);
            GUI_Delay(2000);
            WM_DeleteWindow(hWin);
        }
        // 由case GUI_ID_CANCEL: GUI_EndDialog(hWin, 1);  
        else
        {
            WM_DeleteWindow(hWin);
            OnICON00 = 0;
        }
    }
}

我用了5 个IO按键做五向摇杆,没用到触屏鼠标。在任务N中调用了GUI_PID_StoreState(&_State); 在任务M中处理OnICON00Clicked。执行了红色阻塞对话框摇杆就没反应了;;;但若按注释中的动作(替换GUI_DELAY,注销蓝色部分),画面就会抖动(不停得在重绘),但摇杆有效,可以看到屏上光标在动,可以选择LISTVIEW的项及BUTTON 回退键 CLOSE
请教一:阻塞窗口中 接收哪些消息?执行了阻塞窗体后,屏光标、LISEVIEW的项、BUTTON怎么点选?是发送KEY命令 还是触屏点选?  如果按实例修改,只用五向摇杆控制,画面不动了
请教二:如果LISTVIEW中点选了某些文件,能执行文件么(txt  bmp的显示 编辑等),没有回调函数,如何根据控件类型,消息类型 来选择具体执行哪个函数呢(自定义的显示TXT BMP函数等)
。。。纠结了两天了,用摇杆只做到了允许画面抖动情况下,可以点选LISTVIEW中的项及BUTTON 并可以打开文件夹、回退上层目录等动作
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-4-13 01:04:24 | 显示全部楼层
有个小问题,你的摇杆是用来当鼠标用的吗,用摇杆实现点击等效果。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2016-4-13 09:19:52 | 显示全部楼层
是的,用摇杆实现光标在任意位置移动 及点击效果
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-4-13 22:33:41 | 显示全部楼层
刚刚测试了下GUI_ExecCreatedDialog(hWin); ,可以执行鼠标移动的,完全没问题的。我用的摇杆。
我在一个任务里面创建一个对话框,另一个任务里面发摇杆移动坐标。
回复

使用道具 举报

2

主题

5

回帖

11

积分

新手上路

积分
11
 楼主| 发表于 2016-4-14 01:46:56 | 显示全部楼层
多谢eric2013,
得到你的宝贵回复信息,经再次查看代码:绘图任务C优先级为50,我的摇杆IO判断是中断触发并同步键值采集任务A(优先级:3  高于绘图任务C),而发送摇杆消息GUI_PID_StoreState的任务B(优先级:51)低于绘图任务,摇杆消息发送不出去。修改了B优先级(:49,  高于绘图任务C后)光标就可以随着摇杆而动了[s:140]
郁闷啊,一次无心的改动优先级,话费了许久时间... ...

请教eric大牛:
        一:为什么调用了GUI_ExecCreatedDialog后,低于绘图任务优先级的任务都停止调度了呢,ucosii中任务没挂起自己其他任务都不能调度,挂起自己后所有其他任务都可以调度才对吧?
        二:还是上面的老话题,如果CHOOSEFILE建立的LISTVIEW中 项,例如.txt or .bmp文件需要打开,怎么获取选中项的信息呢,其中LISTVIEW没有ID出现,该怎么操作,是否可能用到                              GUI_ALLOC_h2p操作
        刚学的ucos、ucgui(emwin)不久,理解不够深入,还请不吝赐教... ...
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115717
QQ
发表于 2016-4-14 09:53:28 | 显示全部楼层
1. 可以使用,昨天也专门测试了,将发生摇杆坐标数据的任务优先级高于emWin绘图任务或者低于emWIn绘图任务都是可以的。
    使用的阻塞式函数GUI_ExecCreatedDialog

2. 这个的确有些麻烦,这个控件没有提供相应的api函数,只能在这个控件的回调函数上面下工夫了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 16:49 , Processed in 0.279460 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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