首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

非常简单的一个有关问题!马上给分

2012-03-01 
非常简单的一个问题!!在线等,马上给分!CDC*dcdcthis- GetDC()StretchDIBits(dc- m_hDC,0,0,w,h,w-1,0

非常简单的一个问题!!在线等,马上给分!
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画
}

热点排行