非常简单的一个问题!!在线等,马上给分!
CDC *dc;
dc=this-> GetDC();
StretchDIBits(dc-> m_hDC,0,0,w,h,w-1,0,-w,h,buf,(BITMAPINFO*)&bih,DIB_RGB_COLORS,SRCCOPY);
::ReleaseDC(0,dc-> m_hDC);
上面的代码正确的把图象画到了 窗口上,但是一旦窗口被档住了 被档住部分的图象就没有了,必须要自己重画。
能不能解决这个问题,不管怎么挡 图象都还在?
[解决办法]
定义一个类成员变量MemDC。在过程里往MemDC上画,而在OnDraw或OnPaint里从MemDC中bitblt
[解决办法]
建議把(BITMAPINFO*)&bih 寫成數據成員
然後在程序後加 Invalidate();
就不用寫到OnDraw()中了
[解决办法]
不过你的画图操作要是复杂的话,这样效率太低可以定义内存DC方法如下:
CMyPaintView::onpaint()
{
CClientDC dc(this);
//创建内存DC
//CClientDC dc(this);
pDLMemDC.CreateCompatibleDC(&dc);
CBitmap bmap;
CRect rect;
GetClientRect(&rect);
bmap.CreateCompatibleBitmap(&dc,rect.Width(),rect.Height());
pDLMemDC.SelectObject(&bmap);
//用白色填充当前画布
pDLMemDC.FillSolidRect(&rect, 0x00FFFFFF);
//画图
CMyPaintView::MDrawCompontToDC();
//画线
CMyPaintView::MDrawLine();
//将内存DC中的图像显示到客户区
dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),
&pDLMemDC,rect.left,rect.top,SRCCOPY);
//删除pDLMemDC
pDLMemDC.DeleteDC();
//删除bmap
bmap.DeleteObject();
}
MDrawCompontToDC()
{
用pDLMemDC画
}