CPaintDC dc(this);
CDC dcMemory;//首先定义一个显示设备对象
CBitmap bmp;;//定义一个位图对象 
dcMemory.CreateCompatibleDC(NULL);
bmp.CreateCompatibleBitmap(&dc,m_iClientW,m_iClientH); 
dcMemory.SelectObject(&bmp);///////////画图部分?????????????
dc.MoveTo(0,0);
dc.LineTo(100,100);
////////////////////????????????
为什么这样就可以画出来,而应该是dcMemory.MoveTo(0,0);dcMemory.LineTo(100,100);的啊?好困惑,我还测试了一下,即便只用dc.MoveTo(0,0);dc.LineTo(100,100);这两句也可以画出来,不是说画图要先建立一个兼容的新设备环境,然后将位图选择入新设备环境,然后再从新设备环境中拷贝位图到正确的设备环境中去吗?难道直接画也可以吗?这两种途径有什么区别吗?///////////////////////////////////////////////////////////////////////////////
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&dcMemory,0,0,SRCCOPY);
bmp.DeleteObject();
dcMemory.DeleteDC();画位图不是要先建立

解决方案 »

  1.   

    你可以直接在屏幕DC上绘图,不需要内存兼容DC;要把位图显示到屏幕上,就必须先将位图选入内存兼容DC,再从内存兼容DC贴到屏幕DC上;创建内存兼容位图,将其选入到内存兼容DC中,然后在内存兼容DC(里面的位图)上绘图,最后将内存兼容DC中的位图贴到屏幕DC,这个过程叫双缓冲,是为了防止绘制过程中逐步绘图导致的断续现象;要防止画面闪烁,还需要响应WM_ERASEBKGND消息防止自动绘制窗口背景。
    关于GDI最好看看袁峰大侠的《Windows图形编程》一书。
      

  2.   

    dcMemory.CreateCompatibleDC(dc);