怎么做到在界面实时显示当前坐标位置,但又不进行重绘

ForgetTomorrow 2021-03-23 04:34:29

如图,鼠标在图像上移动时红色区域会随时变化显示当前鼠标的坐标,难道每次鼠标移动都要把整个界面进行重绘吗?
...全文
701 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 2 楼 ForgetTomorrow 的回复:
[quote=引用 1 楼 sevancheng 的回复:]透明的label 叠放在图片控件上面
透明的label哪里来的?label文字改变时背景不会重绘吗?[/quote] 只重绘文字的矩形区域。
ForgetTomorrow 2021-03-25
  • 打赏
  • 举报
回复
引用 4 楼 hhhh63 的回复:
不知道你用的是D3d还是gdi,重绘这一部分,很快。另外要用双缓存,不然会闪。

用的gdi,现在的问题

引用 8 楼 mmcanyu 的回复:
DC裁剪
虽然已经InvalidateRect(&rect, TRUE);
但是你绘图的时候搞不好是整个窗口绘制的。

绘图的时候确实是整个窗口绘制的,DC裁剪请详细说下?
hhhh63 2021-03-25
  • 打赏
  • 举报
回复
我做过类似的医学图像,就是这样处理的
hhhh63 2021-03-25
  • 打赏
  • 举报
回复
两个办法,一是用InvalidateRect(&rect, TRUE); 失效一部分,在OnPaint事件中会收到rect区域,画背景时只画这一部分,不画整个图形。 另一个方法是,不用InvalidateRect失效,直接用GetDC,重画一部分,包括背景和文字。 关键是画图的时个只画指定的一小部分图形和文字。 效果都不错,记得用双缓存。
越菜越健康 2021-03-24
  • 打赏
  • 举报
回复
InvalidateRect(&rect, TRUE); 仅重绘指定区域 并且将OnPaint的绘制操作放在OnEraseBkgnd 中,OnEraseBkgnd绘制完毕直接返回TRUE。这样在重新绘制指定区域后就自动调用OnPaint函数时,不会出现提问现象,楼主自己试试,我没实际这么干过
ForgetTomorrow 2021-03-24
  • 打赏
  • 举报
回复
引用 5 楼 越菜越健康 的回复:
InvalidateRect(&rect, TRUE); 仅重绘指定区域

试过,还是会调用OnPaint函数
mmcanyu 2021-03-24
  • 打赏
  • 举报
回复
DC裁剪
虽然已经InvalidateRect(&rect, TRUE);
但是你绘图的时候搞不好是整个窗口绘制的。
越菜越健康 2021-03-23
  • 打赏
  • 举报
回复
InvalidateRect(&rect, TRUE); 仅重绘指定区域
hhhh63 2021-03-23
  • 打赏
  • 举报
回复
不知道你用的是D3d还是gdi,重绘这一部分,很快。另外要用双缓存,不然会闪。
ForgetTomorrow 2021-03-23
  • 打赏
  • 举报
回复
引用 1 楼 sevancheng 的回复:
透明的label 叠放在图片控件上面

我用了一个Edit控件放在上面,但是当我修改Edit里的文字时会导致整个窗口进行重绘
ForgetTomorrow 2021-03-23
  • 打赏
  • 举报
回复
引用 1 楼 sevancheng 的回复:
透明的label 叠放在图片控件上面

透明的label哪里来的?label文字改变时背景不会重绘吗?
sevancheng 2021-03-23
  • 打赏
  • 举报
回复
透明的label 叠放在图片控件上面

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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