用Pci控件上面显示图片,OnPaint()绘制其他图片被Pic的图片覆盖
mfc吧
全部回复
仅看楼主
level 1
eco12345 楼主
代码思路:
小弟本来在Pciture控件里里载入了一个背景图片
然后使用CImage在背景图片上面绘制其他图片
出现的问题:
在OnPaint()里绘制CImage的图片,但是发现会被Pciture控件里里载入的背景图片覆盖,请问路过的大哥有啥好办法么?
void CWare::OnPaint()
{
//::UpdateWindow(m_hWnd); //如果使用这个显示会正常,但是所有主窗口和子窗口空间全部会刷新,很闪
CPaintDC dc(this);
this->ShowImagePaint();//此函数是CImage绘制图片的,但是会被Pciture控件载入的图片覆盖
}
2014年07月27日 08点07分 1
level 1
eco12345 楼主
顶下,有知道的大哥吗[啊]
2014年07月27日 09点07分 2
level 1
eco12345 楼主
求关注啊!!
2014年07月27日 11点07分 3
level 2
你把pic控件绘制图片的放在onpaint中那个cimage函数前面试看
2014年07月28日 06点07分 4
背景图片是直接在PIC控件属性里设置的
2014年07月30日 01点07分
level 2
我记得updatewindow你用的是刷新整个窗口,你可以只刷新pic控件,但是应该也会很闪的
2014年07月28日 06点07分 5
level 1
//::UpdateWindow(m_hWnd); //如果使用这个显示会正常,但是所有主窗口和子窗口空间全部会刷新,很闪
是你自己加的吧,
ShowImagePaint(); 看看这函数
2014年07月28日 07点07分 6
level 1
eco12345 楼主
void CWareHouse::ShowImagePaint()
{
CRect rectPic;
GetDlgItem(IDC_STATIC1)->GetClientRect(&rectPic);
for(int n=0;n<(WAREHOUSE_SIZE/2);n++)
{
if(!this->iDrawWareHouse[n].IsNull())
{
int x=rectPic.left+(n%8)*30;
int y=rectPic.top+(n/8)*30
this->iDrawWareHouse[n].Draw(::GetDC(m_hWnd),x,y,this->iDrawWareHouse[n].GetWidth(), this->iDrawWareHouse[n].GetHeight());//显示图
}
}
}
2014年07月30日 01点07分 7
::GetDC(m_hWnd) 的值与 CPaintDC dc(this); 不一样的, 你调试一下, 在ONPAINT里就用 CPaintDC dc(this)这个DC画图,你知道WM_PAINT消息参数吗, 自己去查, 再说 :GetDC(m_hWnd)取得DC时要释放资源的,
2014年07月30日 02点07分
回复 打炮高高手 :谢谢,不过还是没法解决我的问题
2014年07月30日 11点07分
level 9
用哪个DC画无关紧要,首先遇到这种问题你以后要第一个想到双缓冲解决.
也就是先创建一个中间的兼容dc选进你的背景图当画布,然后在这画布上画你要画的其他东西,最后再把它画到你的主dc上去。
网上一大堆例子用脚都能搜出来.
2014年07月31日 01点07分 8
1