嵌入式学习小组
登录
直播中
侯晓萃
7年用户
194经验值
私信
关注
为什么IMAGE控制不能显示位图?
开启该帖子的消息推送
Image
程序
函数
大家好,我用IMAGE控件做按钮利用IMAGE触摸事件处理任务目前遇到困难,
#include "home.h"
#define ID_SET_TOUCH (ID_SET_BASE + 1)
#define ID_SET_
ti
ME (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()就可以正常显示所有图标,但是这么做程序编写就不规范了。
回帖
(4)
冯虎虔
2019-10-21 08:44:09
帮顶
帮顶
举报
周炳胤
2019-10-21 08:59:26
已经解决了。
已经解决了。
举报
谷雪阳
2019-10-21 09:14:37
楼主怎么解决的 能说一下吗 谢谢
楼主怎么解决的 能说一下吗 谢谢
举报
黄敏
2019-10-21 09:31:53
你也是用Image显示图片吗?如果是的话那么Image是控件不是直接的绘制函数,所以当使用控件显示图片时系统是不会立马显示的同时给定绘制函数的文件句柄或说路径要一直保持有效,当屏幕需要刷新时Image控件会自动刷新显示。
你也是用Image显示图片吗?如果是的话那么Image是控件不是直接的绘制函数,所以当使用控件显示图片时系统是不会立马显示的同时给定绘制函数的文件句柄或说路径要一直保持有效,当屏幕需要刷新时Image控件会自动刷新显示。
举报
更多回帖
rotate(-90deg);
回复
相关问答
Image
程序
函数
请问button
位图
显示
白边怎么处理?
2020-04-21
1259
为什么按钮
显示
流
位图
显示
不出图片?
2019-09-12
2004
显示
位图
出现暗影的原因是什么?
2020-05-08
1038
NodeMCU如何将
位图
数组放入PROGMEM (ILI9341)?
2023-02-22
189
IMAQ Arraytoimage 必需的输入
image
是用什么图像?
2018-01-24
7292
拿黑白的图像
显示
位图
都是黑框是怎么回事?
2019-04-04
1444
EMWIN实验BUTTON
位图
显示
bug的解决办法?
2020-08-25
1323
位图
显示
问题如何解决
2020-05-22
1534
位图
显示
如果背景色不为白色,图片还是
显示
有白边
2020-04-06
1244
用labview生成
位图
2012-10-27
1925
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分