MFC双缓冲绘图
来源:互联网 发布:培训出来的程序员 编辑:程序博客网 时间:2024/04/30 02:08
首先上核心代码
CDC memDC,BackDC; //内存绘图设备CBitmap memBitmap,BmpBack;//创建内存绘图设备memDC.CreateCompatibleDC(pDC); memBitmap.CreateCompatibleBitmap(pDC,rectPicture.right,rectPicture.bottom);memDC.SelectObject(&memBitmap); BackDC.CreateCompatibleDC(pDC); BmpBack.LoadBitmap(IDB_BITMAP1); BackDC.SelectObject(&BmpBack); memDC.BitBlt(rectPicture.left,rectPicture.top,rectPicture.right,rectPicture.bottom, &BackDC, 0, 0, SRCCOPY); //自定义绘图函数 newPen.CreatePen(PS_SOLID, 1, RGB(255,0,0)); // 选择新画笔,并将旧画笔的指针保存到pOldPen pOldPen = memDC.SelectObject(&newPen); // 将当前点移动到绘图控件窗口的左下角,以此为波形的起始点 memDC.MoveTo(rectPicture.left, rectPicture.bottom); // 计算m_nzValues数组中每个点对应的坐标位置,并依次连接,最终形成曲线 for (int i=0; i<POINT_COUNT; i++) { nX = rectPicture.left + (int)(i * fDeltaX); nY = rectPicture.bottom - (int)(m_nzValues[i] * fDeltaY); memDC.LineTo(nX, nY); } // 恢复旧画笔 memDC.SelectObject(pOldPen); // 删除新画笔 newPen.DeleteObject(); //把内存绘图拷贝到屏幕 pDC->BitBlt(rectPicture.left,rectPicture.top,rectPicture.right,rectPicture.bottom,&memDC,0,0,SRCCOPY); //清理释放 this->ReleaseDC(pDC); memDC.DeleteDC(); memBitmap.DeleteObject();
其中重要的函数:
BOOLBitBlt(int x,int y,int nWidth,int nHeight,CDC*pSrcDC,int xSrc,int ySrc,DWORDdwRop);
该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境。
hdcDest:指向目标设备环境的句柄。
nXDest:指定目标矩形区域左上角的X轴逻辑坐标。
nYDest:指定目标矩形区域左上角的Y轴逻辑坐标。
nWidth:指定源和目标矩形区域的逻辑宽度。
nHeight:指定源和目标矩形区域的逻辑高度。
hdcSrc:指向源设备环境的句柄。
nXSrc:指定源矩形区域左上角的X轴逻辑坐标。
nYSrc:指定源矩形区域左上角的Y轴逻辑坐标。
dwRop:指定光栅操作代码。这些代码将定义源矩形区域的颜色数据,如何与目标矩形区域的颜色数据组合以完成最后的颜色。
下面列出了一些常见的光栅操作代码:
BLACKNESS:表示使用与物理调色板的索引0相关的色彩来填充目标矩形区域,(对缺省的物理调色板而言,该颜色为黑色)。
DSTINVERT:表示使目标矩形区域颜色取反。
MERGECOPY:表示使用布尔型的AND(与)操作符将源矩形区域的颜色与特定模式组合一起。
MERGEPAINT:通过使用布尔型的OR(或)操作符将反向的源矩形区域的颜色与目标矩形区域的颜色合并。
NOTSRCCOPY:将源矩形区域颜色取反,于拷贝到目标矩形区域。
NOTSRCERASE:使用布尔类型的OR(或)操作符组合源和目标矩形区域的颜色值,然后将合成的颜色取反。
PATCOPY:将特定的模式拷贝到目标位图上。
PATPAINT:通过使用布尔OR(或)操作符将源矩形区域取反后的颜色值与特定模式的颜色合并。然后使用OR(或)操作符将该操作的结果与目标矩形区域内的颜色合并。
PATINVERT:通过使用XOR(异或)操作符将源和目标矩形区域内的颜色合并。
SRCAND:通过使用AND(与)操作符来将源和目标矩形区域内的颜色合并。
SRCCOPY:将源矩形区域直接拷贝到目标矩形区域。
SRCERASE:通过使用AND(与)操作符将目标矩形区域颜色取反后与源矩形区域的颜色值合并。
SRCINVERT:通过使用布尔型的XOR(异或)操作符将源和目标矩形区域的颜色合并。
SRCPAINT:通过使用布尔型的OR(或)操作符将源和目标矩形区域的颜色合并。
WHITENESS:使用与物理调色板中索引1有关的颜色填充目标矩形区域。(对于缺省物理调色板来说,这个颜色就是白色)。
CGdiObject* SelectObject( CGdiObject* pObject );
函数功能:该函数选择一对象到指定的设备上下文环境中,该新对象替换先前的相同类型的对象。
hdc:设备上下文环境的句柄。
hgdiobj:被选择的对象的句柄,该指定对象必须由如下的函数创建。
位图:CreateBitmap, CreateBitmapIndirect, CreateCompatible Bitmap, CreateDIBitmap, CreateDIBsection(只有内存设备上下文环境可选择位图,并且在同一时刻只能一个设备上下文环境选择位图)。
画刷:CreateBrushIndirect, CreateDIBPatternBrush, CreateDIBPatternBrushPt, CreateHatchBrush, CreatePatternBrush, CreateSolidBrush。
字体:CreateFont, CreateFontIndirect。
笔:CreatePen, CreatePenIndirect。
区域:CombineRgn, CreateEllipticRgn, CreateEllipticRgnIndirect, CreatePolygonRgn, CreateRectRgn, CreateRectRgnIndirect。
返回值:如果选择对象不是区域并且函数执行成功,那么返回值是被取代的对象的句柄;如果选择对象是区域并且函数执行成功,返回如下一值;
- MFC绘图,双缓冲
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC 双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- MFC双缓冲绘图
- [MFC]OnPaint双缓冲绘图
- MFC 双缓冲 绘图实例
- MFC双缓冲绘图实例
- WINCE双缓冲绘图 Win32和MFC
- MFC单文档程序 双缓冲绘图
- MFC-双缓冲绘图-CMemDC的封装
- Razor视图引擎-基础语法
- Spring 注解
- ios nil、NULL和NSNull 的使用
- OpenStack Nova启动一个虚拟机内部流程
- python根据一个日期获得星期几
- MFC双缓冲绘图
- 第39级台阶
- 架构1
- android source code compile
- 基于QJM/Qurom Journal Manager/Paxos的HDFS HA原理及代码分析
- oracle sql语句优化
- 中国国家气象局天气预报信息接口
- linux下history(历史)命令用法详解
- 【实验一】计算机是怎样工作的?