前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >duilib直接加载HBITMAP作为背景图

duilib直接加载HBITMAP作为背景图

作者头像
大菊观
发布2020-03-18 20:00:55
1.3K0
发布2020-03-18 20:00:55
举报

很简单,利用CPaintManagerUI的方法即可。

const TImageInfo* AddImage(LPCTSTR bitmap, HBITMAP hBitmap, int iWidth, int iHeight, bool bAlpha, bool bShared = false);

该函数作用是添加位图到自己的资源里面

参数说明:

bitmap:图片名,类似于xxx.png等,后缀无所谓,不要重复。

hBitmap:位图句柄。这个位图句柄不能被选入到其他的dc里面。原因见:AlphaBlend失败,错误码87

iWidth:位图的宽度。

iHeight:位图的高度。

bAlpha:位图是否有alpha通道。

bShared:是否共享给其他CPaintManagerUI对象(是否是全局共享资源)。

add完毕后,其他控件直接setbkimage正常使用即可,setbkimage传参是图片名,就是addimage的第一个参数。

示例:

HDC hDc = GetDC(NULL);
HDC memDC = ::CreateCompatibleDC(hDc);
HBITMAP hBitmap = ::CreateCompatibleBitmap(hDc,200,200);	
HGDIOBJ hOld = ::SelectObject(memDC,hBitmap);
RECT rcBMP = {0,0,200,200};
CRenderEngine::DrawColor(memDC,rcBMP,0x80FFFFFF);
SelectObject(memDC,hOld);
DeleteDC(memDC);
ReleaseDC(hDc);

m_PM.AddImage(L"testbmp",hBitmap,200,200,true,true);
pControl->SetBkImage(L"testbmp");

正常add并且set之后,仍然不显示,那么可能:

1.你的窗口渲染使用的是AlphaBlend函数,这个函数在渲染这个位图时失败了,可以看下错误码。错误原因请看我另外一篇文章。

2.位图绘制的有问题,可能是全透明了。gdi的画图函数是不支持alpha通道的。

3.位图句柄失效了,可能是被你误删除(DeleteObject)了。

4.图片名重复,此时你需要先调用CPaintManagerUI::RemoveImage(LPCTSTR bitmap, bool bShared = false);来从CPaintManagerUI中删除原先的同名图片,然后SetBkImage时要先pControl->SetBkImage(L"")再pControl->SetBkImage(L"你的图片名")。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档