用PNG做背景图的透明有关问题
用PNG做背景图的透明问题
我用CImage加载了一副PNG图像,该PNG图像带有透明部分,我在现实对话框的时候只想显示图片,其他部分做透明处理,因此想到的解决方案是将桌面DC中对应窗口位置的部分的图先Bitblt到我的绘图DC上,再去绘制图像,代码如下。
并且我在OnMove函数中强制刷新界面,照理说我拖动窗口,透明部分应该要跟着变化,可是奇怪的就是背景部分并不变化,当我最小化最大化的时候却可以变化。
我在OnPaint中添加了代码去打印移动的坐标,发现移动窗口的时候也能打印,并且也是变化的,说明该代码是起效果的,但是为什么背景就是不变化呢》》
------解决思路----------------------
还是你的刷新没有起作用
可以用二次缓冲试试
我用CImage加载了一副PNG图像,该PNG图像带有透明部分,我在现实对话框的时候只想显示图片,其他部分做透明处理,因此想到的解决方案是将桌面DC中对应窗口位置的部分的图先Bitblt到我的绘图DC上,再去绘制图像,代码如下。
并且我在OnMove函数中强制刷新界面,照理说我拖动窗口,透明部分应该要跟着变化,可是奇怪的就是背景部分并不变化,当我最小化最大化的时候却可以变化。
我在OnPaint中添加了代码去打印移动的坐标,发现移动窗口的时候也能打印,并且也是变化的,说明该代码是起效果的,但是为什么背景就是不变化呢》》
CPaintDC dc(this);
CDC memDC;
CBitmap memBmp, *pOldBmp = NULL;
memDC.CreateCompatibleDC(&dc);
memBmp.CreateCompatibleBitmap(&dc, m_rcWnd.Width(), m_rcWnd.Height());
pOldBmp = memDC.SelectObject(&memBmp);
CRect rcInDesktop;
HDC hdcDesktop = ::GetDC(NULL);
GetWindowRect(&rcInDesktop);
::BitBlt(memDC.GetSafeHdc(), 0, 0, m_rcWnd.Width(), m_rcWnd.Height(),
hdcDesktop, rcInDesktop.left, rcInDesktop.top, SRCCOPY);
CString str;
str.Format(L"%d:%d\n", rcInDesktop.left, rcInDesktop.top);
OutputDebugString(str);
if (!m_bgImg.IsNull())
{
m_bgImg.Draw(memDC.GetSafeHdc(), 0, 0);
}
dc.BitBlt(0, 0, m_rcWnd.Width(), m_rcWnd.Height(), &memDC, 0, 0, SRCCOPY);
// 资源销毁
memDC.SelectObject(pOldBmp);
memBmp.DeleteObject();
------解决思路----------------------
还是你的刷新没有起作用
可以用二次缓冲试试