VC从内存DC贴图到客户区DC
CDCdcMem;dcMem.CreateCompatibleDC(&dcDisplay);....dcMem里有一幅图,现在想把它贴到对话框上去,要怎么做?谢谢啦PS:...
CDC dcMem;
dcMem.CreateCompatibleDC( &dcDisplay );
....
dcMem里有一幅图,现在想把它贴到对话框上去,要怎么做?
谢谢啦
PS:dcDisplay并非对话框客户区DC
请注意:我先是把显示屏截取下来(CDC dcDisplay,CBitmap btmDisplay),然后存在了内存DC(dcMem)里面,现在我想把该图从dcMem中贴到对话框客户区DC里面。要知道,dcMem已经CreateCompatibleDC(&dcDisplay),而且btmDisplay已经CreateCompatibleBitmap(&dcDisplay,nWidth,nHeight)
我的意思是:dcMem是dcDisplay的兼容DC,不是客户区的兼容DC,怎么贴图? 展开
dcMem.CreateCompatibleDC( &dcDisplay );
....
dcMem里有一幅图,现在想把它贴到对话框上去,要怎么做?
谢谢啦
PS:dcDisplay并非对话框客户区DC
请注意:我先是把显示屏截取下来(CDC dcDisplay,CBitmap btmDisplay),然后存在了内存DC(dcMem)里面,现在我想把该图从dcMem中贴到对话框客户区DC里面。要知道,dcMem已经CreateCompatibleDC(&dcDisplay),而且btmDisplay已经CreateCompatibleBitmap(&dcDisplay,nWidth,nHeight)
我的意思是:dcMem是dcDisplay的兼容DC,不是客户区的兼容DC,怎么贴图? 展开
1个回答
展开全部
你这样不行的吧,我也没试过这种情况,但是应该可以换种方法来实现的。或者你把位图数据保存后根据位图数据到与设备DC兼容的内存DC(不是与你那个dcDisplay兼容)上绘制图形。以后就可以用这个内存DC的数据直接拷贝到设备DC了。
————————————————
既然前几步你都做了,那么只要获得显示区的控件DC,比如对话框的DC,然后做最后那一步就行了,就是用BitBlt函数。源DC为你的内存DC,BitBlt有两种形式,一种是我这里提供的pdc->BitBlt(),一种是BitBlt(hdc, 目标起点横坐标x值, 目标起点纵坐标y值, 宽, 高, 源DC, 源起点横坐标x, 源起点纵坐标y, 拷贝方式)。具体各参数是干嘛的我也写了啊。更详细的可以在百度百科中查找这个函数得知。
————————————
我就简单地举例说明一下过程吧,假设pdc是对应控件的DC指针,比如对话框的、对话框中某个控件的,至于这个怎么获得不用我和你说了吧。
CDC memDC;
memDC.CreateCompatibleDC(pdc); // 创建与指定DC兼容的内存中的设备上下文(DC)
CBitmap bm;
bm.CreateCompatibleBitmap(pdc, Width, Height); // 创建与指定DC兼容的位图
memDC.SelectObject(&bm); // 将bm放入内存DC
memDC.FillSolidRect(x, y, Width, Height, RGB(240,240,240));// 在内存上绘制分形图前先以背景色填充绘图区域
//这里实际上是画你想画的图,比如使用memDC.SetPixel()等各种方式,这里我偷懒了,直接用背景色填充了
pdc ->BitBlt(x, y, // 画图起点
Width, Height, // 画图的宽高
&memDC, x, y, SRCCOPY); // 源DC,源起点,直接拷贝方式
OK,至此搞定。
总结起来,就是先创建兼容的内存DC和位图,然后把位图选入内存DC,再在内存DC上画图,拷贝到显示的DC上。
————————————————
既然前几步你都做了,那么只要获得显示区的控件DC,比如对话框的DC,然后做最后那一步就行了,就是用BitBlt函数。源DC为你的内存DC,BitBlt有两种形式,一种是我这里提供的pdc->BitBlt(),一种是BitBlt(hdc, 目标起点横坐标x值, 目标起点纵坐标y值, 宽, 高, 源DC, 源起点横坐标x, 源起点纵坐标y, 拷贝方式)。具体各参数是干嘛的我也写了啊。更详细的可以在百度百科中查找这个函数得知。
————————————
我就简单地举例说明一下过程吧,假设pdc是对应控件的DC指针,比如对话框的、对话框中某个控件的,至于这个怎么获得不用我和你说了吧。
CDC memDC;
memDC.CreateCompatibleDC(pdc); // 创建与指定DC兼容的内存中的设备上下文(DC)
CBitmap bm;
bm.CreateCompatibleBitmap(pdc, Width, Height); // 创建与指定DC兼容的位图
memDC.SelectObject(&bm); // 将bm放入内存DC
memDC.FillSolidRect(x, y, Width, Height, RGB(240,240,240));// 在内存上绘制分形图前先以背景色填充绘图区域
//这里实际上是画你想画的图,比如使用memDC.SetPixel()等各种方式,这里我偷懒了,直接用背景色填充了
pdc ->BitBlt(x, y, // 画图起点
Width, Height, // 画图的宽高
&memDC, x, y, SRCCOPY); // 源DC,源起点,直接拷贝方式
OK,至此搞定。
总结起来,就是先创建兼容的内存DC和位图,然后把位图选入内存DC,再在内存DC上画图,拷贝到显示的DC上。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F4是一款非常优秀的微控制器,以下是它的一些特点:1. 高性能:STM32F4基于Cortex-M4内核,采用了DSP指令和浮点运算单元,可以实现高速的信号处理和计算。2. 多种接口:STM32F4集成了多种外设接口,包括USB、...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询