ListView_SetBkImage 无法多次显示背景图片

LeonTown 2008-02-28 11:20:56
如题,在WM5环境
第一次进入该界面,并运行ListView_SetBkImage时,能够正常显示选择的背景图片;
当返回前一个界面后,再回到刚才的界面,并再次调用ListView_SetBkImage,却没能显示出背景图片;

代码跟踪,发现每次调用ListView_SetBkImage,其第二个参数所包含的HBITMAP hbm 参数,始终指向同一个句柄。但就只有第一次调用能够显示出背景图片。

另外,发现 ListView_SetBkImage 在第一次调用时,有正常返回值
但接下来的调用,都返回0。表示错误。
GetLastError() 返回6,句柄无效。
ListView_SetBkImage 的两个参数,在每次调用时也貌似正常。

大家看是什么原因啊?~~
...全文
190 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LeonTown 2008-02-29
  • 打赏
  • 举报
回复
谢谢楼上二位高人!
ListView_SetBkImage中的第二个参数是 LVBKIMAGE ×
该参数中有个 HBITMAP 类型的成员 hbm,
我调用完ListView_SetBkImage后,调用DeleteObject(hbm),

但第二次还是显示不出背景图片,
而且,第二次DeleteObject后,GetLastError()还是返回6

再帮看看啊,应该快接近了!~
LeonTown 2008-02-29
  • 打赏
  • 举报
回复
贴上代码:
画背景函数如下
void draw()
{
......

LVBKIMAGE sBKImg; //用于第二个参数
sBKImg.cchImageMax = 0;
sBKImg.pszImage = NULL;
sBKImg.hbm = GET_MELODEOCLIENT()->m_playBGBMP; //获得位图句柄
sBKImg.ulFlags = LVBKIF_SOURCE_HBITMAP | LVBKIF_STYLE_NORMAL;
sBKImg.xOffsetPercent = 50;
sBKImg.yOffsetPercent = 100;

ListView_SetBkImage(m_listArtist, &sBKImg); //设置背景

......
}

每次进入该页面,调用上述函数画背景。

应该不能在该函数中 DeleteObject(),否则不能显示背景。
我曾试着将 LVBKIMAGE sBKImg; 定义为local static
并在给 hbm 赋值前 DeleteObject(),
但还是第二次无法显示图片。

麻烦大家再帮忙想办法解决一下吧!
feitianlee 2008-02-28
  • 打赏
  • 举报
回复
如果listview本身没有问题的话,可能就是HBITMAP导致的,你试着释放一下BHITMAP资源看看?
sunwhite 2008-02-28
  • 打赏
  • 举报
回复
ListView_SetBkImage中的参数HBITMAP在每次使用完毕后,应该使用DeleteObject释放其资源,否则会导致程序出现问题。

7,655

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧