图像重绘怪异错误

xiaojunjun1202 2011-06-21 08:29:44

该对话框可以缩放,右边的控件是用来设定Y坐标的最小最大值。左边红色区域为绘图区域,需要根据实时的数据或者保存的数据一直重绘的。在读取保存的数据绘图时(重复绘制),前面几次没有问题,但是重复的次数一多,经测试,会出现两种状况中的一种,一是右边控件设置区域(除了红色区域外的区域)有的时候会变成白色;二是描述坐标的数字(如:65535,0,3,251)等输出的位置不对,同时整个窗口区域(红色区域+后面控件设置区域)都变成灰色,背景色也为灰色。请问各位大大,问题有可能出在哪?
本来仅仅绘制左边的图已经没有问题,出现问题是在添加右边的控件后。
如何在这个对话框中设置Y轴的最大最小值呢
...全文
159 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaojunjun1202 2011-06-22
  • 打赏
  • 举报
回复
利用 OnStnCliceked 和 ::GetCursorPos获得坐标后,利用ScreenToClient 转换到 picture contorl 里的坐标,在转换为绘制的坐标,(0~254,0~65535,)然后显示绘制的坐标
xiaojunjun1202 2011-06-22
  • 打赏
  • 举报
回复
想了以个折中的法子就是只绘制红色区域

但是如何获得 在picture control 鼠标单击的坐标值呢?大伙能否给个思路?
xiaojunjun1202 2011-06-22
  • 打赏
  • 举报
回复
另外,不能只重绘picture control 吗?
因为项目很紧,可能暂时不能用自定义控件了
q1q2q3q4ln 2011-06-22
  • 打赏
  • 举报
回复
程序的逻辑问题
向立天 2011-06-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 xiaojunjun1202 的回复:]

引用 11 楼 xianglitian 的回复:
别用picture ctrl
用自定义控件试试


自定义控件没用过,可以说详细点吗?
[/Quote]
有兴趣的话可以看看这两篇文章
http://blog.csdn.net/xianglitian/archive/2010/12/14/6075653.aspx
http://blog.csdn.net/xianglitian/archive/2010/12/27/6100767.aspx
向立天 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 xiaojunjun1202 的回复:]

好的,我试试
另外,对话框的缩放的同时 控件也跟着移动,这部分代码会不会也对绘图有影响?
[/Quote]那是肯定的
我一般在OnSize里面Invalidate一下
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
好的,我试试
另外,对话框的缩放的同时 控件也跟着移动,这部分代码会不会也对绘图有影响?
向立天 2011-06-21
  • 打赏
  • 举报
回复
就看这个图看你的描述很难分析出问题所在
建议你屏蔽掉一些代码
一点一点试一下
雪影 2011-06-21
  • 打赏
  • 举报
回复
开发程序就不要怕麻烦了~~
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 tttyd 的回复:]
引用 3 楼 xiaojunjun1202 的回复:

to tttyd

但是不加右边的控件,我测试了30次左右吧,都没出问题,根据您的经验,你觉得最可能是哪的问题?
是不是是我的图直接画在对话框上,然后刷新整个对话框的时候,连带右边的控件一起刷新导致的?

可以在左边使用一个Static控件,在改控件中绘制,这样测试一下
[/Quote]

我也是这样想的,但是代码改动太大?如果不是这个原因引起的那就费时了
雪影 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xiaojunjun1202 的回复:]

to tttyd

但是不加右边的控件,我测试了30次左右吧,都没出问题,根据您的经验,你觉得最可能是哪的问题?
是不是是我的图直接画在对话框上,然后刷新整个对话框的时候,连带右边的控件一起刷新导致的?
[/Quote]
可以在左边使用一个Static控件,在改控件中绘制,这样测试一下
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
to tttyd

但是不加右边的控件,我测试了30次左右吧,都没出问题,根据您的经验,你觉得最可能是哪的问题?
是不是是我的图直接画在对话框上,然后刷新整个对话框的时候,连带右边的控件一起刷新导致的?
雪影 2011-06-21
  • 打赏
  • 举报
回复
你这个是程序的逻辑问题
你仔细检测一下绘制的逻辑 是不是缺少考虑什么~
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
自己先顶上去,别沉了
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 xianglitian 的回复:]
别用picture ctrl
用自定义控件试试
[/Quote]

自定义控件没用过,可以说详细点吗?
向立天 2011-06-21
  • 打赏
  • 举报
回复
别用picture ctrl
用自定义控件试试
xiaojunjun1202 2011-06-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xianglitian 的回复:]
引用 8 楼 xiaojunjun1202 的回复:

好的,我试试
另外,对话框的缩放的同时 控件也跟着移动,这部分代码会不会也对绘图有影响?
那是肯定的
我一般在OnSize里面Invalidate一下
[/Quote]

如何只刷新 picture control中的内容,试了好一阵都没解决,
pDLG->GetDlgItem(IDC_PIC)->Invalidate(TRUE);不行
CRect rt;
pDLG->GetDlgItem(IDC_PIC)->GetWindowRect(&rt);
ScreenToClient(&rt);
::InvalidateRect(pDLG->GetDlgItem(IDC_PIC)->GetSafeHwnd(),&rt,TRUE);
也不对~~~

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧