GDI+ 困扰了两天了,求路过的兄弟指点

zhuhongke652 2018-01-06 02:06:32
如下图所示,我在用三个label 一个picturebox 编写一个控件,我想实现的效果是点击这个标签时用GDI+ 绘制出点击的这个label和picturebox 一起组成的区域,并且把picturebox 填充成点击的这个label的颜色。


现在功能实现了,但是我发现当控件被拖到屏幕以下,然后快速提起来时有一部分线条和颜色填充消失(如下面两张图)


但是当我慢慢地提起来时,线条和填充完整。

我在这个自制控件的paint 事件和picturebox 的paint 事件下都设置了断点,发现不管是快速提起还是慢速提起都会触发paint 事件。
但是两个paint 事件下面都有绘制图形的代码。
这样我始终没有弄明白,快速提起时线条缺失的原因?为什么慢速提起就没有问题?

求各位路过的兄弟指点。
...全文
816 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
吹风的兔子 2018-12-21
  • 打赏
  • 举报
回复
另外,说到 GDI 我来说两句: > GDI 可以雪中送碳, Directx 只能锦上添花 —— 换言之:可以没有 Directx,不能没有GDI。 > GDI 有很多跨平台的算法框架,硬件加速当然 各个平台都有 —— 但 Directx 严重捆绑了 Windows平台。 > 操作打印机 —— 语法和 GDI 一摸一样,有本事你用 Directx 操作一个打印机试试。 —— 换言之:GDI 是针对所有的 图形显示(显示器、打印机...) 而 Directx 等硬件加速 只能针对显卡。
吹风的兔子 2018-12-21
  • 打赏
  • 举报
回复
这种情况一般是由于你重绘时 部分像素 会没有 绘制导致的: > 检查你的代码 计算绘制区尺寸时,是否计算尺寸错误。 > 不要 手动使用 裁剪 —— 直接绘制整个控件 的全部区域。 —— 很大概率 是 第一个原因。
  • 打赏
  • 举报
回复
不要搞得这么麻烦
良朋 2018-12-18
  • 打赏
  • 举报
回复
直接用TabPage不好吗? 用GDI控件多了刷屏慢啊
dylike 2018-12-17
  • 打赏
  • 举报
回复
首先,要开启控件的DoubleBuffert属性,其次,绘制要写在paint或者onpaint,根据上面的描述,可能是绘制过程出现了异常直接跳出绘制过程了,要检查代码。
rock_333 2018-01-13
  • 打赏
  • 举报
回复
当一个窗口被档着的时候,内部的gdi绘出的色,会被涮去,解决方法是,当被档着的时候再重绘,
xfy_ 2018-01-11
  • 打赏
  • 举报
回复
我觉得你在自定义vs的tabControl这个控件
  • 打赏
  • 举报
回复
记得是一个高速刷新要设置一下,但是这样就会有窗口闪烁的感受,总之你有这个做gdi+的功夫,去拿别人做好的cskin也行,用wpf也行,做directx ui 也行。 gdi+真的不要再用了。

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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