我用了双缓冲怎么还是闪啊?

xiyoo 2007-03-12 09:39:45
void CPukerDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
GetClientRect(&rect);
if (IsIconic())
{
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; dc.DrawIcon(x, y, m_hIcon);
}
else
{
if(k!=0)
{
CDC mdc;
CBitmap bitmap;
mdc.CreateCompatibleDC(&dc);
bitmap.CreateCompatibleBitmap(&dc,rect.right,rect.bottom);
mdc.SelectObject(&bitmap);
DrawPuker((CPaintDC&) mdc);
dc.BitBlt(0,0,rect.right,rect.bottom,&mdc,0,0,SRCCOPY);
bitmap.DeleteObject();
mdc.DeleteDC();
}
else
{
dc.BitBlt(0,0,rect.right,rect.bottom,&Mdc,0,0,SRCCOPY);
}
}
}

void CPukerDlg::DrawPuker(CPaintDC &dc)
{
CDC MemDC,memDC;
MemDC.CreateCompatibleDC(&dc);
memDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&bb);
dc.BitBlt(0,0,800,600,&Mdc,0,0,SRCCOPY);
for(int i=0;i<17;i++)
{
dc.StretchBlt(40,10+15*i,80,120,&MemDC,0,0,71,96,SRCCOPY);
dc.StretchBlt(540,10+15*i,80,120,&MemDC,0,0,71,96,SRCCOPY);
pp[0].LoadBitmap(dizhu[i]+173);
memDC.SelectObject(pp[0]);
dc.StretchBlt(155+16*i,450,80,120,&memDC,0,0,71,96,SRCCOPY);
pp[0].DeleteObject();
}
for(i=0;i<3;i++)
{
dc.StretchBlt(190+100*i,10,80,120,&MemDC,0,0,71,96,SRCCOPY);
}
if(k==2)
{
for(i=0;i<3;i++)
{
pp[0].LoadBitmap(dizhu[i+17]+173);
memDC.SelectObject(pp[0]);
dc.StretchBlt(155+16*(i+17),450,80,120,&memDC,0,0,71,96,SRCCOPY);
dc.StretchBlt(190+100*i,10,80,120,&memDC,0,0,71,96,SRCCOPY);
pp[0].DeleteObject();
}
}
}
...全文
73 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

2,100

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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