我的程序在绘图过程有点慢,看起来像是动画.我想把图画好后,保存为位图 ,然后在OnDraw()中加载,并显示出来,这样就看不一绘图过程了,但是自己做了很久都没做出来,每次都是窗口发生重绘图形就消失了.急求这方面的代码,,,,非常非常感谢.这是经毕业设计中的一部分呀,老过不了这人坎,着急!
解决方案 »
- 下面函数处理bmp绑定资源是怎么处理的???
- Slider控件SetRange()问题
- VC结构体:调试时出现:CX0030:error: expression cannot be evaluated运行时出现:microsoft基础类库已停止工作
- 动态改变按钮的的文字颜色??
- 有关事件的触发
- 胡柏华和半杯水进来拿分。非常感谢
- 如何得到CUP的ID号
- 像windows画图板的橡皮线是怎么实现的???
- 关于vc++工程文件改名
- 如何实现系统级的对话框,并屏蔽系统热键(如Ctrl+alt+del.Alt+Tab),即让该对话框运行后,非要通过该对话框才能回到WINDOWS,起到锁屏的
- 在 MFC 常规动态库能不能进行函数重载?
- Opengl绘制任意曲面
CBitmap* CPic_RDAView::CopyClientToBitmap()
{
// HDC hCltDC, hMemDC;
CDC* pCltDC;
CDC* pMemDC;
CDC mMemDC;
CBitmap Bitmap, OldBitmap;
CBitmap* pBitmap;
CBitmap* pOldBitmap;
int nX, nY, nX2, nY2;
CRect rc;
GetClientRect(rc);
nX = rc.left ;
nY = rc.top;
nX2 = rc.right;
nY2 = rc.bottom;
nWidth = nX2 - nX; //得到位图宽度
nHeigth = nY2 - nY; //我到位图高度
CClientDC dcCliet(this);
pCltDC = &dcCliet;
mMemDC.CreateCompatibleDC(pCltDC);
pMemDC = &mMemDC;
Bitmap.CreateCompatibleBitmap(&mMemDC ,nWidth, nHeigth );
pBitmap = &Bitmap;
pOldBitmap = mMemDC.SelectObject(pBitmap);
mMemDC.BitBlt(0,0,nWidth,nHeigth,pCltDC,nX,nY,SRCCOPY);
pBitmap = mMemDC.SelectObject(pOldBitmap);
return pBitmap;
}
CPic_RDAView::function1()
{
DrawPic(); //实现在客户区绘图
pBitmap = CopyClientToBitmap();//画完后将整个客户区作为位图保存,取得位图指针
CopyOver = TRUE;//标志提取位图指针结束;
}
然后在OnDraw()中加入:
{ if(CopyOver)
{
CDC dcMem;
CBitmap* pOldBitmap;
dcMem.CreateCompatibleDC(pDC);
pOldBitmap = dcMem.SelectObject(pBitmap);
pDC->BitBlt(0,0,nWidth,nHeigth,&dcMem,0,0,SRCCOPY);
dcMem.SelectObject(pOldBitmap);
dcMem.DeleteDC();
}
}
备注:编译都可以通过,运行时可以看到绘图过程(因为这个图形绘制耗时),绘完后图形显示正常,但旦窗口改变大小后,图形就不见了,,,我以前把DrawPic()放到Ondraw中,就是因为每次窗口发生大小变化图形都得重画,所以想到画好后将它作为一张位图在OnDraw()中显示,问题就是保存为位图后调用就不对了.