怎样将内存中的图保存为CBit地图对象

怎样将内存中的图保存为CBitmap对象?
MFC编程。如题。我用CPen在面板上通过一个循环画了一副五颜六色的背景,之後我想让鼠标在背景上移动时会有以鼠标为零点的坐标线。我每移动下鼠标这幅背景就得重画,然后画坐标线。然而绘画背景的那个循环太庞大,占用了大量CPU。我想只通过循环绘一次背景,然后拷贝保存,当鼠标移动时,只绘制背景的拷贝,请问我该怎样实现?我想在第一次绘图时保存CDC对象,或者CBitmap对象,可是没成功,不知道有什麽方法,或者函数,最好能举个例子,谢谢

------解决方案--------------------
画图一般是双缓冲绘图
创建一个memdc,把要画的背景先画到这上面,然后每次更新,把memdc复制到屏幕hdc
(这个方法你搜一搜,代码很多)
----------

不过你的问题,应该不是这么解决。
有一种位操作叫异或运算;同样绘图也有一种方式叫异或绘制
用 SetROP2(R2_XORPEN), 

你绘制完坐标线后,当更新鼠标位置,重新绘制新的坐标线时,你要用相同的坐标线颜色,在原来的位置先重新绘制一边,这样两次异或操作的结果就是又恢复了已开始的底案颜色;
然后再在新位置画新的坐标线
------解决方案--------------------
创建一个和背景尺寸大小相同的CBitmap  把你的背景画在这个CBitmap  当你需要重绘背景时 就把这张位图贴上去
------解决方案--------------------
创建内存双缓冲DC,
例如,
CPaintDC dc(this);
CDC* pDC;
CBitmap bitmap;
pDC->CreateCompatibleDC(&dc); // 创建一个内存兼容的dc
bitmap.CreateCompatibleBitmap(&dc, m_rect.Width(), m_rect.Height());// 
pDC->SelectObject(bitmap); // 位图选入内存dc中

------解决方案--------------------
    象你这种情况可以采用线程来画背景,同时进行局部更新背景,也就是你知道鼠标移动坐标点及坐标线的位置,那么,你只需要更新这部分范围就可以了.
    你想采用的方法也可以,这个你可以查一下屏幕截图的代码,代码也不多,用到4楼提到的函数了,只不过4楼没给全
------解决方案--------------------
引用:
引用:创建内存双缓冲DC,
例如,
CPaintDC dc(this);
CDC* pDC;
CBitmap bitmap;
pDC->CreateCompatibleDC(&dc); // 创建一个内存兼容的dc
bitmap.CreateCompatibleBitmap(&am……


那位仁兄的意思是,你原来绘制好的图先保存在内存CDC之中。然后以这个内存CDC为原型,在OnMouseMove中绘制坐标线在屏幕DC显示。

因为BitBlt和StretchBlt都有参数接口可以CDC为原型。