MFC 画图 老是闪烁 求高手指点 70

voidCSnake_ServerDlg::DrawMap(CDC*pDC,CRectrect,intRed,intwhite,intGreen){//画图代码CDCMe... void CSnake_ServerDlg::DrawMap(CDC *pDC,CRect rect,int Red,int white,int Green)
{//画图代码
CDC MemDC;
CBitmap MemBitmap;
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(), rect.Height());
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);
MemDC.FillSolidRect(rect.left, rect.top, rect.Width(), rect.Height(),RGB(Red,white,Green));
pDC->BitBlt(rect.left, rect.top, rect.Width(), rect.Height(),&MemDC,0,0,SRCCOPY);
MemBitmap.DeleteObject();
MemDC.DeleteDC();
}

调用的代码
void CSnake_ServerDlg::OnPaint()
{
CDC *pDC=this->GetDC();
CRect rect;
pDC->GetClipBox(&rect);
DrawMap(pDC,rect,100,100,0);
CRect rect1;
rect1.left= rect.left+50;
rect1.top = rect.left+20;
rect1.right = rect.Width()-20;
rect1.bottom =rect.Height()-20;
DrawMap(pDC,rect1,100,100,255);
}
在线等啊
展开
 我来答
jiangsanhuo
2014-08-20 · TA获得超过169个赞
知道小有建树答主
回答量:291
采纳率:81%
帮助的人:174万
展开全部
你把memdc那段移植到OnPaint中,然后将memdc传给DrawMap, 之后在OnPaint中bitblt到窗口DC

CBitmap MemBitmap;
MemDC.CreateCompatibleDC(pDC);
MemBitmap.CreateCompatibleBitmap(pDC,rect.Width(), rect.Height());
DrawMap(&MemDC...
...

pDC->BitBlt(

最后pDC->ReleaseDC
追问
麻烦你给改下代码,我直接拷贝出来用哈
joychen_
2014-08-20 · TA获得超过1747个赞
知道大有可为答主
回答量:1617
采纳率:100%
帮助的人:1830万
展开全部
调了两次DrawMap? 为什么不一次性在内存DC上画完再输出, 这样可以减少闪烁.
更多追问追答
追问
因为我有多次调用,麻烦你帮我改下,我的代码,分不是问题
追答
懒死算了, 我不稀罕你的分.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式