OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2975|回复: 4

IMAGE控制不能显示位图请教

[复制链接]

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
972
金钱
972
注册时间
2016-6-15
在线时间
473 小时
发表于 2016-9-2 09:10:09 | 显示全部楼层 |阅读模式
6金钱
本帖最后由 shuaigew88 于 2016-9-2 09:12 编辑

    大家好,我用IMAGE控件做按钮利用IMAGE触摸事件处理任务目前遇到困难,
#include "home.h"
#define ID_SET_TOUCH     (ID_SET_BASE + 1)
#define ID_SET_TIME      (ID_SET_BASE + 2)
#define ID_SET_BKIMAGE  (ID_SET_BASE + 3)
#define ID_SET_HELP      (ID_SET_BASE + 4)
#define ID_SET_EXIT      (ID_SET_BASE + 5)

IMAGE_Handle SET_hImage[5];
static void _cbDialog(WM_MESSAGE * pMsg)
{
        static bool app=false;
  int i; FIL bmp;
  switch(pMsg ->MsgId)
        {
                case WM_PAINT: //重绘                  
                     if(app==false)
                                 {
                                   f_open(&bmp,"picture/home/1.bmp",FA_READ);
                 GUI_BMP_DrawEx(_Get_BackImage,(void *)&bmp,0,20);   //这里重绘的是背景图片,可以正常显示背景
                 f_close(&bmp);
               
                 f_open(&bmp,"picture/set/touch/touch.bmp",FA_READ);
                                         IMAGE_SetBMPEx(SET_hImage[0],_Get_BackImage,(void *)&bmp); //这里重绘第一个IMAGE图标,不能显示
                 f_close(&bmp);
               
           f_open(&bmp,"picture/set/time/time.bmp",FA_READ);
           IMAGE_SetBMPEx(SET_hImage[1],_Get_BackImage,(void *)&bmp); //第二个图标也不能显示
           f_close(&bmp);
               
           f_open(&bmp,"picture/set/bkimage/bkimage.bmp",FA_READ);
           IMAGE_SetBMPEx(SET_hImage[2],_Get_BackImage,(void *)&bmp); //以下都不能显示
           f_close(&bmp);
               
           f_open(&bmp,"picture/set/help/help.bmp",FA_READ);
           IMAGE_SetBMPEx(SET_hImage[3],_Get_BackImage,(void *)&bmp);
           f_close(&bmp);
               
           f_open(&bmp,"picture/set/exit/exit.bmp",FA_READ);
           IMAGE_SetBMPEx(SET_hImage[4],_Get_BackImage,(void *)&bmp);
           f_close(&bmp);
                                 }
                break;
               
               
                case WM_NOTIFY_PARENT:
                     switch(WM_GetId(pMsg ->hWinSrc))
                                 {
                                   case ID_SET_TOUCH:                  //触摸校准
                                                    switch(pMsg ->Data.v)
                                                                {
                                                                  case WM_NOTIFICATION_CLICKED:
                                                                                   f_open(&bmp,"picture/set/touch/_touch.bmp",FA_READ);
                                   IMAGE_SetBMPEx(SET_hImage[0],_Get_BackImage,(void *)&bmp);
                                   f_close(&bmp);
                                                                        break;
                                                                        
                                                                        case WM_NOTIFICATION_RELEASED:
                                                                             app =true;
                                                                             for(i=0;i<5;i++)
                                                                                 WM_DeleteWindow(SET_hImage);
                                                                        
                                                                             IS_Touch(true);
                                                                             Create_SetDesktop();
                                                                             app =false;
                                                                        break;
                                                                }
                                         break;
                                                               
                                                               
                                         case ID_SET_TIME:                  //时间设置
                                                    switch(pMsg ->Data.v)
                                                                {
                                                                  case WM_NOTIFICATION_CLICKED:
                                   f_open(&bmp,"picture/set/time/_time.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[1],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                        
                                                                        case WM_NOTIFICATION_RELEASED:
                       f_open(&bmp,"picture/set/time/time.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[1],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                }
                                         break;
                                                               
                                                               
                                         case ID_SET_BKIMAGE:               //背景图片
                                                    switch(pMsg ->Data.v)
                                                                {
                                                                  case WM_NOTIFICATION_CLICKED:
                       f_open(&bmp,"picture/set/bkimage/_bkimage.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[2],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                        
                                                                        case WM_NOTIFICATION_RELEASED:
                             f_open(&bmp,"picture/set/bkimage/bkimage.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[2],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                }
                                         break;
                                         
                                                               
                                         case ID_SET_HELP:                   //帮助
                                                    switch(pMsg ->Data.v)
                                                                {
                                                                  case WM_NOTIFICATION_CLICKED:
                       f_open(&bmp,"picture/set/help/_help.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[3],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                        
                                                                        case WM_NOTIFICATION_RELEASED:
                       f_open(&bmp,"picture/set/help/help.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[3],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;                        
                                                                }
                                         break;
                                                        
                                                               
                                         case ID_SET_EXIT:                   //返回
                                                    switch(pMsg ->Data.v)
                                                                {
                                                                        case WM_NOTIFICATION_CLICKED:
                       f_open(&bmp,"picture/set/exit/_exit.bmp",FA_READ);
                             IMAGE_SetBMPEx(SET_hImage[4],_Get_BackImage,(void *)&bmp);
                             f_close(&bmp);
                                                                        break;
                                                                        
                                                                  case WM_NOTIFICATION_RELEASED:
                                                                                   app =false;
                       for(i=0;i<5;i++)
                                                                                 WM_DeleteWindow(SET_hImage);
                                                                             Create_HomeDesktop();
                                                                        break;               
                                                                }                                                
                                         break;
                                 }                                         
                break;
               
               
                default:
                        WM_DefaultProc(pMsg);
                break;
        }
}

void Create_SetDesktop()    //这里是创建5个IMAGE控件,然后在消息中设置IMAGE的bmp图片
{
        WM_SetCallback(WM_HBKWIN,_cbDialog);
        SET_hImage[0]= IMAGE_CreateEx(0, 20,240,30,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_SET_TOUCH);
        SET_hImage[1]= IMAGE_CreateEx(0, 50,240,30,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_SET_TIME);
        SET_hImage[2]= IMAGE_CreateEx(0, 80,240,30,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_SET_BKIMAGE);
        SET_hImage[3]= IMAGE_CreateEx(0,110,240,30,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_SET_HELP);
        SET_hImage[4]= IMAGE_CreateEx(0,140,240,30,WM_HBKWIN,WM_CF_SHOW,IMAGE_CF_TILE,ID_SET_EXIT);
}


现在程序的状态是开机显示主界面,主界面有很多图标其中的设置图标被点击后调用Create_SetDesktop()切换到设置界面,设置界面就会创建以上5个IMAGE图标(用来做按钮),但是切换后只显示背景图片,IMAGE的BMP图标都没有显示出来,我在相应位置触摸是可以正常进入下一级菜单(本级菜单分别是触摸校验/时间设置/背景图片设置/帮助/返回),比如在触摸校验的位置触摸就可以正常进入触摸校验程序、触摸返回的位置就正常返回到了主界面,从这点可以说明IMAGE控件是正常被创建了,而且消息可以正常处理就是加载的图标不显示,请大家帮我看看是为什么?是不是IMAGE的控件少了哪些设置?我调试了IMAGE控件创建正常返回了句柄,f_open也正常读到了数据,就是 IMAGE_SetBMPEx()函数不能显示,如果我把IMAGE_SetBMPEx()全部换成GUI_BMP_DrawEx()就可以正常显示所有图标,但是这么做程序编写就不规范了。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165226
金钱
165226
注册时间
2010-12-1
在线时间
2107 小时
发表于 2016-9-2 09:10:10 | 显示全部楼层
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
972
金钱
972
注册时间
2016-6-15
在线时间
473 小时
 楼主| 发表于 2016-9-4 06:54:18 | 显示全部楼层
已经解决了。
回复

使用道具 举报

6

主题

119

帖子

0

精华

高级会员

Rank: 4

积分
712
金钱
712
注册时间
2015-11-26
在线时间
139 小时
发表于 2016-9-22 17:25:34 | 显示全部楼层

楼主怎么解决的  能说一下吗  谢谢
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
972
金钱
972
注册时间
2016-6-15
在线时间
473 小时
 楼主| 发表于 2016-9-22 19:16:34 | 显示全部楼层
本帖最后由 shuaigew88 于 2016-9-22 19:18 编辑
hanzixi_angel 发表于 2016-9-22 17:25
楼主怎么解决的  能说一下吗  谢谢

你也是用Image显示图片吗?如果是的话那么Image是控件不是直接的绘制函数,所以当使用控件显示图片时系统是不会立马显示的同时给定绘制函数的文件句柄或说路径要一直保持有效,当屏幕需要刷新时Image控件会自动刷新显示。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-1 22:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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