标程: GDI 双缓冲技术
2009-05-01 13:35
218 查看
void CGreedySnakeView::OnDraw(CDC* pDC) { // TODO: 在此处为本机数据添加绘制代码 CDC memDC; CDC tempDC; CBitmap memBmp; CRect rectClient; GetClientRect(rectClient); memDC.CreateCompatibleDC(pDC); tempDC.CreateCompatibleDC(pDC); memBmp.CreateCompatibleBitmap(pDC, rectClient.right, rectClient.bottom); memDC.SelectObject(&memBmp); drawBackgound(&tempDC, &memDC, rectClient); drawMap(&tempDC, &memDC); pDC->BitBlt(0, 0, rectClient.right, rectClient.bottom, &memDC, 0, 0, SRCCOPY); tempDC.DeleteDC(); memDC.DeleteDC(); pDC->SelectStockObject(BLACK_BRUSH); } void CGreedySnakeView::drawBackgound(CDC* tempDC, CDC* memDC, CRect& rectClient) { tempDC->SelectObject(&m_bmpBackGound); memDC->BitBlt(0, 0, rectClient.right, rectClient.bottom, tempDC, 0, 0, SRCCOPY); } void CGreedySnakeView::drawMap(CDC* tempDC, CDC* memDC) { int tempMap[MAP_HEIGHT][MAP_WIDTH]; memcpy(tempMap,Manager::theManager()->getBlocks(),sizeof(tempMap)); // Manger 构造函数中调用initialGame 已经loadMap for (int i = 0; i < MAP_HEIGHT; ++i) for (int j = 0; j < MAP_WIDTH; ++j) { switch(tempMap[i][j]) { case MAP_OBSTACLE: tempDC->SelectObject(&m_bmpBrick); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_FRUIT: tempDC->SelectObject(&m_bmpFruit); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_SNAKE_BODY: tempDC->SelectObject(&m_bmpSnakeBody); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; case MAP_SNAKE_HEAD: tempDC->SelectObject(&m_bmpSnakeHead); memDC->BitBlt(j*10, i*10, 10, 10, tempDC, 0, 0, SRCCOPY); break; } } }
相关文章推荐
- Windows GDI画图闪烁解决方法 双缓冲技术
- 双缓冲技术及其在VC的GDI环境下的实现
- C#: GDI+双缓冲技术的使用
- 双缓冲技术及其在VC的GDI环境下的实现
- 双重绘图缓冲技术,消除gdi绘图闪烁现象
- 双缓冲技术及其在VC的GDI环境下的实现
- C# GDI+双缓冲技术 及 资源
- 利用《双缓冲技术及其在VC的GDI环境下的实现》理解armv7计数器中的双缓冲技术
- Java中用双缓冲技术消除闪烁
- C#下实现双缓冲描画高频曲线(GDI+结合GDI)
- ASP.NET 缓冲: 技术及最佳实践
- 5.4 双缓冲技术(Double Buffering)-5
- php5与mysql5 web 开发技术详解-11 php输入输出缓冲
- win32双缓冲技术的实现
- android绘制知识--双缓冲绘图技术
- [转载]什么是闪烁及双缓冲技术
- 双缓冲技术
- 双缓冲技术
- 使用GDI技术创建ASP.NET验证码
- IO缓冲技术基础使用