双缓存绘图(2)
来源:互联网 发布:狼友基地最新最全数据 编辑:程序博客网 时间:2024/06/06 16:43
//构造函数中:加载图片
CString strImagePath = CfgInst.GetAppPath() + IMAGE_PATH;_bstr_t bstr(strImagePath); wchar_t *wstr = (wchar_t*)bstr;m_pDeviceBoardImage = new Image(wstr);
void CDeviceBoard::OnPaint(){ CPaintDC dc(this); CRect rect; GetClientRect(&rect); //图像显示区域 CRect rectImage(rect); m_lOffsetX = rect.left + (int)(rect.Width() * DEVICE_BOARD_PERCENT); m_lOffsetY = rect.top; rectImage.left = m_lOffsetX; rectImage.top = m_lOffsetY; rectImage.right = rectImage.left + (*m_pDeviceBoardImage).GetWidth(); rectImage.bottom = rectImage.top + (*m_pDeviceBoardImage).GetHeight(); //内存dc CDC dcMemDraw; dcMemDraw.CreateCompatibleDC(&dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height()); CBitmap *pOldBit = dcMemDraw.SelectObject(&bitmap); //填充背景色为白色 CBrush brush; if (!brush.CreateSolidBrush(WHITE)) { return; } brush.UnrealizeObject(); dcMemDraw.FillRect(rect, &brush); brush.DeleteObject(); //画垂直分割线 CPen pen; if (!pen.CreatePen(PS_SOLID, LINE_WIDTH, LINECOR)) { return; } CPen *pPenOld = dcMemDraw.SelectObject(&pen); dcMemDraw.MoveTo((int)((float)rect.Width() * g_fLinePos), rect.top); dcMemDraw.LineTo((int)((float)rect.Width() * g_fLinePos), rect.bottom); Graphics myGraphics(dcMemDraw); myGraphics.DrawImage(m_pDeviceBoardImage, (int)rectImage.left, (int)rectImage.top, (int)(*m_pDeviceBoardImage).GetWidth(), (int)(*m_pDeviceBoardImage).GetHeight()); dcMemDraw.SelectObject(pPenOld); //绘制面板左上角文字 CFont font; VERIFY(font.CreateFont(12, 0, 0, 0, FW_NORMAL, FALSE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "宋体")); CFont* def_font = dcMemDraw.SelectObject(&font); dcMemDraw.SetBkMode(TRANSPARENT); dcMemDraw.TextOut(20, 20, "设备面板状态图"); dcMemDraw.SelectObject(def_font); //将内存dc中的图像拷贝到屏幕上 dc.StretchBlt(0, 0, rect.Width(), rect.Height(), &dcMemDraw, 0, 0, rect.Width(), rect.Height(), SRCCOPY); //绘图完成后的清理 dcMemDraw.SelectObject(pOldBit); pen.DeleteObject(); bitmap.DeleteObject(); dcMemDraw.DeleteDC(); return;}
- 双缓存绘图(2)
- 双缓存绘图(1)
- 学习笔记(三):双缓存绘图
- 双缓存绘图GDI
- 双缓存绘图
- MFC 双缓存绘图
- Windows编程 双缓存绘图
- VC GDI+双缓存绘图
- VC 双缓存绘图 闪屏
- MFC双缓存绘图实现
- 双缓存实现无闪烁绘图
- 基于c#的双缓存技术绘图
- Qt 2D绘图(九)双缓冲绘图简介
- 关于内存DC绘图防止屏幕闪烁说明(亦即双缓存技术) .
- python绘图:matplotlib绘图(2)
- C#中双缓存绘图的实现方法
- C#中双缓存绘图的实现方法
- VC双缓存绘图以及鼠标拖图的问题
- UIWebView的使用
- zoj 3574 Under Attack II//归并排序
- Android之json数据解析
- 让Red Hat linux 9.0与XP组成双系统
- WinCE流驱动入门
- 双缓存绘图(2)
- oracle基本操作
- Java内存对象的逃逸分析
- 让Datagridview支持自定义回车事件
- js 简单练习节点
- 容斥原理(转载http://www.cppblog.com/vici/archive/2011/09/05/155103.html)
- HashMap,HashSet,LinkedHashSet,LinkedHashMap,ArrayList
- JVM优化之逃逸分析(Escape Analysis)
- 程序运行时,利用反射调用不同窗体