硬汉嵌入式论坛

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

[emWin] WM_PAINT下函数调用有问题

[复制链接]

4

主题

15

回帖

4

积分

新手上路

积分
4
发表于 2017-8-31 17:43:09 | 显示全部楼层 |阅读模式
为什么我在 WM_PAINT消息下调用  GUI_JPEG_DrawScaled()函数绘制背景,为什么老是显示不正常,函数返回值也是1 手册上说返回不是0说明函数执行失败。。。。但是我调用定时器在定时器消息下
调用这个函数就可以,或者在主函数里调用这个函数也可以,请问这是什么原因?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-1 01:12:08 | 显示全部楼层
没问题,一般就是在WM_PIANT消息里面绘制的,方便的话,贴下你的代码。
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-1 09:28:34 | 显示全部楼层

回 eric2013 的帖子

eric2013:没问题,一般就是在WM_PIANT消息里面绘制的,方便的话,贴下你的代码。 (2017-09-01 01:12) 
我就是参照的安富莱的智能家居的例程测试的。在WM_PAIN消息下重绘jpeg图片作为背景 但是调用这个函数就出错

static void _cbBk(WM_MESSAGE * pMsg)
{
    uint32_t NCode, Id, sel;
    static uint32_t module_mutex = 0;
    uint8_t sec, min, hour;
    char text_buffer[20]={0};
   
    switch (pMsg->MsgId)
    {   
        /*重绘 */
        case WM_PAINT:
        sec = GUI_JPEG_DrawScaled(_ac21688,573704UL + 1,0,0,100,100);     
                 
            break;        
        /*  */
        case WM_TIMER:
            break;

//      GUI_DrawBitmap(&bmMimi2,0,0);
//            GUI_MEMDEV_WriteAt(hMempic,0,0);   


        case WM_NOTIFY_PARENT:
            Id    = WM_GetId(pMsg->hWinSrc);     
            NCode = pMsg->Data.v;              

            switch (NCode)
            {  
                /* μã»÷ICONí¼±êoó */
                case WM_NOTIFICATION_CLICKED:
                    break;
                /* êí·ÅICONí¼±ê í¨1y±äá¿prevent_refreshêμÏÖμã»÷ICONí¼±êêí·ÅoóÔù×öÖػ棬*/
                case WM_NOTIFICATION_RELEASED:        
                    if (Id == '0')
                    {
                        sel = ICONVIEW_GetSel(pMsg->hWinSrc);
                        if(sel < GUI_COUNTOF(_aBitmapItem))
                        {
                        
                            if(module_mutex == 0)
                            {
                                module_mutex = 1;
//                                _apModules [sel](pMsg->hWinSrc);
//                                current_module = sel;
                            }
                        }
                        
                     }               
                    break;
               
                /* í¨1yÕa¸öÏûÏ¢»Ö¸′DT¸Ä±äá¿module_mutex = 0¾í¿éòÔÔù′Î′ò¿aICONí¼±ê */
                case 0x500:
                    module_mutex = 0;
//                    current_module = 0xFF;
                    break;

                default:
                    break;
            }
            break;
        default:
            WM_DefaultProc(pMsg);
    }

}
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-1 09:32:15 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:我就是参照的安富莱的智能家居的例程测试的。在WM_PAIN消息下重绘jpeg图片作为背景 但是调用这个函数就出错

static void _cbBk(WM_MESSAGE * pMsg)
{
....... (2017-09-01 09:28) 
这是主函数,主函数里的GUI_JPEG_Draw可以刷出图来 但是刚刷出来 一调用WM_PAIN下的这个函数,就花屏了。
void MainInterface()
{
    int i = 0;

    WM_SetCallback(WM_HBKWIN, _cbBk);

    GUI_SetFont(&GUI_Font16_1);
    GUI_DispStringAt("Encoding JPEG......", LCD_GetXSize()/2, LCD_GetYSize()/2);   

   
//    GUI_MEMDEV_WriteAt(hMempic,0,0);   
   
    hMempic = GUI_MEMDEV_CreateFixed(0,
                                     0,
                                     LCD_GetXSize(),
                                     LCD_GetYSize(),
                                     GUI_MEMDEV_HASTRANS,
                                     GUI_MEMDEV_APILIST_16,
                                     GUICC_M565);
    GUI_MEMDEV_Select(hMempic);
    i = GUI_JPEG_Draw(_ac21688,573704UL + 1,0,0);     

  hTimerTime = WM_CreateTimer(WM_HBKWIN, ID_TIMER_TIME, 1000, 0);
    GUI_MEMDEV_Select(0);
}
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-1 09:32:45 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:这是主函数,主函数里的GUI_JPEG_Draw可以刷出图来 但是刚刷出来 一调用WM_PAIN下的这个函数,就花屏了。
void MainInterface()
{
    int i = 0;
....... (2017-09-01 09:32) 
我其实就是参照安富莱的例子改的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-1 10:17:13 | 显示全部楼层
有个问题我确认下,你现在窗口是不是使能存储设备了,即调用函数WM_SetCreateFlags(WM_CF_MEMDEV),如果调用了这个函数,将其注释下,然后测试你的代码看看。


另外,你现在用的是F429吧,emWin动态内存分配的多大。
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-1 14:05:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:有个问题我确认下,你现在窗口是不是使能存储设备了,即调用函数WM_SetCreateFlags(WM_CF_MEMDEV),如果调用了这个函数,将其注释下,然后测试你的代码看看。


另外,你现在用的是F429吧,emWin动态内存分配的多大。 (2017-09-01 10:17) 
我用的407   那个存储设备我删过了的 一样的都不行 都是在WM_PAIN下刷图刷不出来,在主函数里怎样都能刷出来    动态内存 1024x700
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-1 14:13:36 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:我用的407   那个存储设备我删过了的 一样的都不行 都是在WM_PAIN下刷图刷不出来,在主函数里怎样都能刷出来    动态内存 1024x700
 (2017-09-01 14:05) 
咦 如果我在 主函数里调用一个显示的字符串 屏幕会正常显示,但是如果调用GUI_Delay()一刷新 ,屏幕就黑了(没有写回调函数)  请问我这种现象正常吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-2 02:14:16 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:咦 如果我在 主函数里调用一个显示的字符串 屏幕会正常显示,但是如果调用GUI_Delay()一刷新 ,屏幕就黑了(没有写回调函数)  请问我这种现象正常吗? (2017-09-01 14:13)
方便的话,把你的工程压缩上传到百度云上,我给你看看。感觉你的工程模板有问题。

我们这个论坛最近出问题了,上传大文件不成功。
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-4 00:10:18 | 显示全部楼层

回 eric2013 的帖子

eric2013:

方便的话,把你的工程压缩上传到百度云上,我给你看看。感觉你的工程模板有问题。

我们这个论坛最近出问题了,上传大文件不成功。
咦 如果我在 主函数里调用一个显示的字符串 屏幕会正常显示,但是如果调用GUI_Delay()一刷新 ,屏幕就黑了(没有写回调函数)  请问我这种现象正常吗?
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-4 00:12:18 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:

咦 如果我在 主函数里调用一个显示的字符串 屏幕会正常显示,但是如果调用GUI_Delay()一刷新 ,屏幕就黑了(没有写回调函数)  请问我这种现象正常吗?
谢谢了
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-4 00:15:20 | 显示全部楼层

回 ccrrww 的帖子

ccrrww:咦 如果我在 主函数里调用一个显示的字符串 屏幕会正常显示,但是如果调用GUI_Delay()一刷新 ,屏幕就黑了(没有写回调函数)  请问我这种现象正常吗? (2017-09-04 00:10) 
http://pan.baidu.com/s/1c2q4yo4
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107418
QQ
发表于 2017-9-4 01:00:02 | 显示全部楼层
看了下你的程序,F407配合外部SRAM性能太有限了。我们V5板子配套的是60块钱一片的2MB高速SRAM,性能就非常捉急。

这种绘制到存储设备的方案,还是等你以后用F429+SDRAM了再测试。
回复

使用道具 举报

4

主题

15

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2017-9-4 11:03:08 | 显示全部楼层

回 eric2013 的帖子

eric2013:看了下你的程序,F407配合外部SRAM性能太有限了。我们V5板子配套的是60块钱一片的2MB高速SRAM,性能就非常捉急。

这种绘制到存储设备的方案,还是等你以后用F429+SDRAM了再测试。 (2017-09-04 01:00) 
好的,谢谢了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-31 05:02 , Processed in 0.363674 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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