利用HDC在内存上绘图
来源:互联网 发布:apache ftp http访问 编辑:程序博客网 时间:2024/06/05 15:10
有时候,我们需要脱离控件来进行绘图,这是因为利用控件进行绘图有一定的局限性。而且有一些是他人需要用到的类时,用控件往往需要获取当前窗口指针等等操作,这个时候并不是很便利。相比较而言,利用内存直接进行回执,将图形全部回执在内存上,对方只需要将这块内存拷贝到画布上即可。
pDC->BitBlt(0,0,300,300,m_pDC,0,0,SRCCOPY);
上述所说的方法,可以通过HDC来实现,HDC是CDC的一个句柄,我们通过对一个对象传入HDC实现利用CDC来绘图,而且在整个类的内部绘图的CDC只要替换成这个外部传入的即可,省去了很多麻烦。但是由于对HDC并不是很熟悉,一开始也遇到了一些问题,现在将HDC传入到类内部使用的流程讲述一下。
首先,HDC是一个句柄,也就是一个指向CDC的指针,我们知道,绘图操作一般都是通过CDC来完成的,而句柄不具备调用那些函数的作用或者调用起来比较麻烦。所以我们需要先对HDC进行初始化,要让他指向我们要绘图的DC。
m_hDC = pDC->m_hDC;
而这个时候,由于我们的绘图是用CDC的,所以如果我们的HDC在一个对象中完成了它的绘制任务,需要将HDC转换成CDC,如下:
m_pDC = CDC::FromHandle(m_hDC);
这个时候,我们就可以对其进行绘图了。
m_itic -> CreateITIC( m_hDC ,500,300);
等到完成了绘图之后,我们需要将m_pdc绘制的内容拷贝到pDC 上,完成图形的打印。
以下是整个处理的流程:
CDC *pDC = GetDC(); m_hDC = pDC->m_hDC; static int flag = 0; m_rect = CRect(0,0,500,500); if (flag == 0) { m_pDC = CDC::FromHandle(m_hDC); GetClientRect(m_rect); m_bitmap.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height()); m_pDC->SelectObject(&m_bitmap); //m_pDC->FillSolidRect(300,300,400,400,RGB(0,255,0)); m_itic->ShowDataPoint(TRUE); m_itic->CreateITIC(m_hDC,500,300); flag =1; }
pDC->BitBlt(0,0,300,300,m_pDC,0,0,SRCCOPY);
当然,当我们传入一个HDC到一个对象内部,我们需要将它转换回PDC,所以在对象内部,也要进行: m_pDC = CDC::FromHandle(m_hDC);的操作,来玩成转换。这样的话,就可以通过HDC来绘图了。
- 利用HDC在内存上绘图
- 利用HDC在内存上绘图
- 在内存中绘图
- 在内存中绘图
- GDI+在内存中绘图
- VC在内存中绘图
- 在内存绘图并保存为图片格式
- 在内存上运行的操作系统
- JAVA 程序在内存上的分布
- 浮点数在内存上的表示
- c++:变量在内存上的分布
- iOS图像处理(6)在内存上下文中绘图
- 如何:在内存分配编号上设置断点
- 疑问:在内存上的IO缓存与buffer cache
- C++和JAVA在内存管理上的特点
- 在内存中装Win7
- 在内存剖析对象
- 在内存剖析对象
- hadoop深入研究:(九)——mapreduce中的压缩
- ubuntu 安装sun-jdk
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(二)--Silverlight 配置动态的 webService、动态加载ArcGis地图服务
- GIT & REPO & GERRIT (四)
- excel 批量删除单元格中的“alt+enter”换行
- 利用HDC在内存上绘图
- 基于mAppWidget实现手绘地图(二)--概要
- python模块之HTMLParser
- Android批量打包
- 最大的连续矩形面积
- Base64类型与Strng类型相互转化
- Andorid APK反逆向解决方案:梆梆加固原理探寻
- ArcGis For Silverlight API,地图显示Gis,绘制点,线,绘制图等(三)--绘制点、线、圆,显示提示信息
- sqlServer增加一字段并给此字段添加注释