我要在一个DIB图上画一个十字线,当鼠标左键按下并移动时,这个十字线跟着移动,DIB图不移动,问题是:鼠标移动时不停的刷新屏幕,图像闪烁的很厉害!!
我直接在OnEraseBkgnd中返回TRUE,但这样的话在程序运行时,背景就不会刷新(比如:在程序运行前,桌面是蓝色的,当程序运行后,视图区就是刚才的那个蓝色),这个问题我实在不知道怎么解决!
请大家指点,谢谢!!!
我直接在OnEraseBkgnd中返回TRUE,但这样的话在程序运行时,背景就不会刷新(比如:在程序运行前,桌面是蓝色的,当程序运行后,视图区就是刚才的那个蓝色),这个问题我实在不知道怎么解决!
请大家指点,谢谢!!!
void CMemDCView::OnDraw(CDC* pDC)
{
CMemDCDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); // TODO: add draw code for native data here
CDC MemDC;
MemDC.CreateCompatibleDC( pDC);
CRect rect;
this->GetClientRect(rect);
CBitmap bmpFace;
bmpFace.CreateCompatibleBitmap(pDC,rect.Width(),rect.Height());
CBitmap* pOldBmp = NULL;
pOldBmp = MemDC.SelectObject(&bmpFace);
CBrush brush(RGB(255,255,255));
MemDC.FillRect(rect,&brush);
for(int i=0;i<500;i++)
{
MemDC.MoveTo(22+i,22);
MemDC.LineTo(22+i,277);
}
pDC->BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&MemDC,rect.left,rect.top,SRCCOPY);
MemDC.SelectObject(pOldBmp);
bmpFace.DeleteObject();}
CDC MemDC; //首先定义一个显示设备对象
CBitmap MemBitmap;//定义一个位图对象//随后建立与屏幕显示兼容的内存显示设备
MemDC.CreateCompatibleDC(NULL);
//这时还不能绘图,因为没有地方画 ^_^
//下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight);
//将位图选入到内存显示设备中
//只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap);//先用背景色将位图清除干净,这里我用的是白色作为背景
//你也可以用自己应该用的颜色
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));//绘图
MemDC.MoveTo(……);
MemDC.LineTo(……);//将内存中的图拷贝到屏幕上进行显示
pDC->BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY);//绘图完成后的清理
MemBitmap.DeleteObject();
MemDC.DeleteDC();
什么是异或模式啊,请你说详细一些,我不大懂哦!