mfc绘制移动波形图,像高级任务管理器器的内...

君,已阅读到文档的结尾了呢~~
基于vc的管件切割离线编程系统的设计与实现,upvc管件,线切割编程软件,线切割怎么编程,数控火焰切割机编程,caxa线切割编程,线切割编程,caxa线切割编程软件,vc mfc编程实例,vc编程
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
基于vc的管件切割离线编程系统的设计与实现
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口Picture&Control用SetPixel绘制点显示出来移动下窗口就消失了,然后在点击下绘制好了,在怎么移动都不消失为什么?
void&dlg::OnBnClickButton1()
CWnd*&pWnd&=&GetdlgItem(IDC_STPIC);
pWnd-&GetclientRect(&rect);
CDC*&pDC&=&pWnd-&GetDC();
for(i=0;&i&rect.Hetght();&i++)
&&for(j=0;&j&rect.width();&j++)
&pDC-&Setpixel(j,&i&,&RGB(0,0,255));
ReleaseDC(pDC);
上面是代码,请指点下那个地方不对,为什么移动下窗口就没了,要重新点下又出来,在移动就不会出问题!
回复讨论(解决方案)
把贴图写在OnPaint里
任何窗口,在非OnPain/OnDraw里绘制的东西,都是临时的,接收下一个WM_PAINT消息后,都将消失,如果希望不让绘制不消失,则要在OnPain/OnDraw里绘制
那我用按钮触发的应该怎么做,还要看看我这个代码有错误吗?
还有为什么我再次点击按钮后怎么移动都不消失
MSDN98_1.ISO&
,&&MSDN98_2.ISO&
MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
MSDN98_1.ISO&
,&&MSDN98_2.ISO&
MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
这是帮助文档?
MSDN98_1.ISO&
,&&MSDN98_2.ISO&
MSDN98\SAMPLES\VC98\MFC\TUTORIAL\SCRIBBLE\STEP1~7\*.*
这是帮助文档?
通过学习SCRIBBLE教程,深刻体会MVC的思想。
那我用按钮触发的应该怎么做,还要看看我这个代码有错误吗?
按钮触发应该调用窗口的Invalidate函数,从而触发WM_PAINT消息,由WM_PAINT处理函数负责重绘窗口频繁绘制遇到错误需要关闭 -MFC- TryCatch
>> Content
窗口频繁绘制遇到错误需要关闭
&&&&请教各位大侠。我的绘制函数不在OnDraw里面,因为我需要非常频繁的绘制,这样会使窗口抖动;而且我试着用双缓存,但是绘制速度比较慢,达不到我所需要的效果。&&&&我不知道这样会不会出现问题。&&&&我用其他消息比如OnMouseMove来驱动窗口绘制。这样可以解决抖动和显示速度缓慢的问题。但是程序运行大约三分钟,就会出现“遇到问题需要关闭”的错误。&&&&我将256幅图片动态的放入内存中,大概占了70MB左右,中间以为是更新图片时没有释放内存,但是释放完了还是一样的。不知是哪里出现了问题,请各位帮帮忙!&&&&我用的是GDI+里面的Draw。
------Solutions------
光靠描述很难定位。运行过程中,内存有一直增长吗?
------Solutions------
内存没有增长,我以为是内存的问题,但仔细检查了一下,似乎该释放的都释放掉了!
------Solutions------
那说明还是程序内部的BUG
------Solutions------
我在显示的过程中需要更新窗口内的文字,我的做法是建立一个内存设备,将一部分需要显示文字的区域背景保存在其中,需要更新时将前面的文字覆盖掉以免文字重叠,但是每次使用完毕我都会释放内存设备呀!
------Solutions------
绘制不在OnDraw下调用应该不会出现问题吧!
------Solutions------
不在OnDraw中处理绘制操作会导致很多无法预期的bug你用GDI+效率低是正常的如果不是要处理透明的png图片没必要用GDI+你所说的抖动应该是你处理的方法不对正确处理是不会出现所谓抖动的你现在的问题明显是绘制资源没有及时释放应该调整整个程序架构
------Solutions------
引用&2&楼&wowye&的回复:内存没有增长,我以为是内存的问题,但仔细检查了一下,似乎该释放的都释放掉了!你怎么检查的,最简单的看看任务管理器中内存的使用是否是只增不减
------Solutions------
"你怎么检查的,最简单的看看任务管理器中内存的使用是否是只增不减"是用任务管理器
------Solutions------
“不在OnDraw中处理绘制操作会导致很多无法预期的bug你用GDI+效率低是正常的如果不是要处理透明的png图片没必要用GDI+你所说的抖动应该是你处理的方法不对正确处理是不会出现所谓抖动的你现在的问题明显是绘制资源没有及时释放应该调整整个程序架构”我显示的是jpg图片,我用l_Picture试了一下,好像显示效率还行,但是从硬盘上读数据到内存,再从内存数据创建图片资源好像挺慢的!频繁的Invalidate是会导致闪烁,因为我的图片是拼起来显示的!
------Solutions------
引用&6&楼&xianglitian&的回复:不在OnDraw中处理绘制操作会导致很多无法预期的bug你用GDI+效率低是正常的如果不是要处理透明的png图片没必要用GDI+你所说的抖动应该是你处理的方法不对正确处理是不会出现所谓抖动的你现在的问题明显是绘制资源没有及时释放应该调整整个程序架构多谢指教!那如果要显示jpg图片,一般用效率比较高的方式是什么呢?我觉得要是把所有的显示都用OnDraw来调用,会不会效率比较低呀?
------Solutions------
引用&10&楼&wowye&的回复:引用&6&楼&xianglitian&的回复:不在OnDraw中处理绘制操作会导致很多无法预期的bug你用GDI+效率低是正常的如果不是要处理透明的png图片没必要用GDI+你所说的抖动应该是你处理的方法不对正确处理是不会出现所谓抖动的你现在的问题明显是绘制资源没有及时释放应该调整整个程序架构多谢指教!那如果要显示jpg图片,一般用效率比较高的方式是什么呢?……...你在内存DC上画好了&然后贴到你的程序上面&我觉应该得还好吧莫非你贴图的过程很复杂么?
------Solutions------
引用&11&楼&likang0712&的回复:引用&10&楼&wowye&的回复:引用&6&楼&xianglitian&的回复:不在OnDraw中处理绘制操作会导致很多无法预期的bug你用GDI+效率低是正常的如果不是要处理透明的png图片没必要用GDI+你所说的抖动应该是你处理的方法不对正确处理是不会出现所谓抖动的你现在的问题明显是绘制资源没有及时释放应该调整整个程序架构多谢指教!那如果要显示jp……你说的是闪烁吗?我试过了,因为这样又增加了一次计算,图片显示就更慢了。我现在又想它不闪烁,又想它显示快一些,有点苛刻哈!所以希望有个显示效率高一些的方法。
------Solutions------
你有多少图片可以在内存里先拼成一个bmp然后在OnDraw里用
------Solutions------
GDI+里释放资源有问题,我以后也遇到过。解决方法只能是不释放了。。。
------Solutions------
引用&13&楼&xianglitian&的回复:你有多少图片可以在内存里先拼成一个bmp然后在OnDraw里用我理解在OnDraw里面之所以会闪烁,是因为更新窗口时首先会Invalidate,使窗口无效然后显示原来的背景色,比如白色,然后显示自己的图片,但是如果频繁更新比如15次/s,就会使背景色与图片交替显示导致闪烁。但是我现在就是需要频繁更新,所以在OnDraw里就会闪,但是如果不在OnDraw里,它就与环境颜色融合很好不会闪。
------Solutions------
问题是,运行几分钟后就BUG了!
------Solutions------
求助中。。。。
------Solutions------
引用&15&楼&wowye&的回复:引用&13&楼&xianglitian&的回复:你有多少图片可以在内存里先拼成一个bmp然后在OnDraw里用我理解在OnDraw里面之所以会闪烁,是因为更新窗口时首先会Invalidate,使窗口无效然后显示原来的背景色,比如白色,然后显示自己的图片,但是如果频繁更新比如15次/s,就会使背景色与图片交替显示导致闪烁。但是我现在就是需要频繁更新,所以在OnDraw里就会闪,但……你既然这么明白就应该指导你所说的擦出操作是由一个专门的消息完成的那就是WM_ERASEBKGND这要处理掉这个消息就不会闪烁了这个和Invalidate没关系你看看这个帖子二楼的回复http://topic.csdn.net/u//2bd7b-498a-9806-a2adbd000c5d.html#r_
------Solutions------
你叫向立天哈?你说的很对,谢谢了!我用OnDraw试过了,但还是会出现这个问题。后来仔细检查了一下发现还是有东西没释放干净,因为写的代码太多了,很不容易找出来!不过我还是倾向于在OnDraw外面画,因为我觉得这样比较灵活一些,而且不用重画整个窗口,而在OnDraw里面要达到这种效果需要设置一些按钮变量来判断,结构就比较复杂了。谢谢了!以后有问题直接请教你哈!
------Solutions------
引用&14&楼&qjgdftxmu&的回复:GDI+里释放资源有问题,我以后也遇到过。解决方法只能是不释放了。。。这位兄台,GDI+释放资源是没有问题的!用delete就行,只不过需要判断一下指针是否为空,最好delete之后将指针置NULL;【MFC】移动绘图
MFC中怎样清除以前画的图形
原文链接:
使用InvalidateRect只刷新你移动的区域,除了矢量图可以移动单独的子图形外,像系统的画图工具都是通过移动整个矩形框来移动子图形的,所以你可以调用InvalidateRect来只刷新当前的选择移动矩形框区域(而对于无规则的非矩形区域可以调用InvalidateRgn刷新无效区域)
补充回答:
我觉得,最好的做法,应该是先用一个位图句柄保存当前需要移动的矩形框,然后再使用FillRect把那整个客户区中的矩形框区域用背景画刷填充掉,然后用另一个位图句柄保存当前整个客户区的图形,使用双缓冲技术,先把第二个大的位图画到后台DC中,再把小的画到后台DC相应的位置,最后使用BitBlt&数据块移动&API函数一次把后台DC中的图形数据移动到当前DC中显示,就可以减少闪烁。。。
回答采纳率:47.0%
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 任务管理器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信