从CPictureEx中生出类CLSGif(为了让Gif背景透明),CPictureEx是CStatic生出来的
添加了如下代码,将原来画矩形的代码改成画背景void CLSGif::DrawBackGround()
{
CClientDC clDC(GetParent());
CRect rect; GetWindowRect(rect);
GetParent()->ScreenToClient(rect);
CRect rc(0,0,rect.Width(),rect.Height());
CBrush br(0xff0000);
if (m_dcBack.m_hDC == NULL)
{
m_dcBack.CreateCompatibleDC(&clDC);
m_dcBack.BitBlt(0, 0, rect.Width(), rect.Height(), &clDC, 0, 0, SRCCOPY);
}
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
}void CLSGif::RefreshBackGround()
{
if(m_dcBack.m_hDC)
m_dcBack.Detach();
}如果只是显示不对也就罢了,关键是关系我现在弄不清楚了
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
可以画出背景上的图来,但是我明明BitBlt到 CDC m_dcBack 中去了的,如果换成
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
就不行了,根本就没有画背景而且即使用clDC.m_hDC的时候,如果在PrepareDC中画,那么最开始得到的居然是工具栏和客户区的位图,但只有一张图是这样的,Gif图形放到下一帧时,又是对话框的内容了,这样按理说应该就正常了,但是用GetParent()的客户区得到的图形居然包含了CStatic本身的内容
我应该如何修改啊,现在开始郁闷了!
添加了如下代码,将原来画矩形的代码改成画背景void CLSGif::DrawBackGround()
{
CClientDC clDC(GetParent());
CRect rect; GetWindowRect(rect);
GetParent()->ScreenToClient(rect);
CRect rc(0,0,rect.Width(),rect.Height());
CBrush br(0xff0000);
if (m_dcBack.m_hDC == NULL)
{
m_dcBack.CreateCompatibleDC(&clDC);
m_dcBack.BitBlt(0, 0, rect.Width(), rect.Height(), &clDC, 0, 0, SRCCOPY);
}
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
}void CLSGif::RefreshBackGround()
{
if(m_dcBack.m_hDC)
m_dcBack.Detach();
}如果只是显示不对也就罢了,关键是关系我现在弄不清楚了
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
可以画出背景上的图来,但是我明明BitBlt到 CDC m_dcBack 中去了的,如果换成
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, 0, 0, SRCCOPY);
就不行了,根本就没有画背景而且即使用clDC.m_hDC的时候,如果在PrepareDC中画,那么最开始得到的居然是工具栏和客户区的位图,但只有一张图是这样的,Gif图形放到下一帧时,又是对话框的内容了,这样按理说应该就正常了,但是用GetParent()的客户区得到的图形居然包含了CStatic本身的内容
我应该如何修改啊,现在开始郁闷了!
-> GetParentOwner()
死得非常惨!!!
我在 PrepareDC 中用 DrawBackGround(); 初始化背景位图,也就是看到工具栏和客户区的位图,第二次就要出错,但是用GetParent()不会错误信息:
File:wincore.cpp
Line:879应用程序发生异常unknown software exception(0x800000003),位置为0x77f9f9df
要终止程序,请单击“确定”
[确定]哈哈!
另外,CButtonST 中的绘制背景的方法也是这个,只不过不是在 PrepareDC 中初始化。
有個bmp透明的例子.也許對你有幫助.
BMP透明的例子我看过,但是和这个实现不一样
http://www15.brinkster.com/qrao/aidb.rar
哪位有空的话,帮忙研究研究,不甚感激
话不多说了,相信你一看就明白。记得给分。刚弹出对话框那时有一下白色,你知道的,显示动画时父窗还没有背景图片。void CLSGif::DrawBackGround()
{
ShowWindow(0);
CRect rect;
GetWindowRect(rect);
GetParent()->ScreenToClient(rect);
GetParent()->InvalidateRect(rect);
GetParent()->UpdateWindow();
CClientDC clDC(GetParent());
CBrush br(0xff0000);
::BitBlt(m_hMemDC, 0, 0, rect.Width(), rect.Height(), clDC.m_hDC, rect.left, rect.top, SRCCOPY);
ShowWindow(1);
}
由于断网几天了,今天才来结贴,抱歉!!