VC++为什么我使用双缓冲,窗口还是闪啊!!
void CMyFirstMFCView::OnDraw(CDC* pDC) { CMyFirstMFCDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; if(AssiDlg.m_hWnd==NULL) { this->AssiDlg.InitDlg(100,100,200,1,this); this->AssiDlg.Create(IDD_SET,this); this->AssiDlg.SetWindowPos(0,coorlist->Distance*DefaultBoard+100,0,NULL,NULL,SWP_NOSIZE|SWP_NOZORDER); this->AssiDlg.ShowWindow(SW_SHOW); } CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设备 MemDC.CreateCompatibleDC(NULL);//这时还不能绘图,因为没有地方画 //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上) MemBitmap.CreateCompatibleBitmap(pDC,400,400);//将位图选入到内存显示设备中 //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上 CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//先用背景色将位图清除干净,这里我用的是白色作为背景 //你也可以用自己应该用的颜色 this->coorlist->ReDraw(&MemDC,AssiDlg.R,AssiDlg.G,AssiDlg.B,AssiDlg.Scale); //自绘控件 pDC->BitBlt(0,0,400,400,&MemDC,0,0,SRCCOPY);//绘图完成后的清理 //把前面的pOldBit选回来.在删除MemBitmap之前要先从设备中移除它 MemDC.SelectObject(pOldBit); MemBitmap.DeleteObject(); MemDC.DeleteDC();}