自绘图窗体界面,拖动窗体边框的时候,会出现边框的痕迹

东方之珠 2020-03-03 09:43:10

上面这个图是一个播放窗体。上、下、左、右四个边框分别用的4个图片框控件, AutoRedraw都已经设置为True了,这4个边框分别用API函数StretchBlt写入,这样做是为了在拖动边框的时候不让边框大小发生变化,边框大小始终一样,当然API操作都是在窗体的Resize事件中进行的。可是问题来了,我拖动窗体边框的时候,会出现边框的痕迹,我中间放了一个图片框不都不管用,根本遮挡不住,请问怎么解决这个问题?
窗体的Resize事件中部分代码如下:
'自绘图窗体界面
hDC1 = TopCaptionPic.hdc
hDC2 = Me.hdc
Call SetStretchBltMode(hDC2, STRETCH_HALFTONE)
Rtn = StretchBlt(hDC2, 0, 0, Me.ScaleWidth, TopCaptionPic.ScaleHeight, hDC1, 0, 0, TopCaptionPic.ScaleWidth, TopCaptionPic.ScaleHeight, SRCCOPY)
hDC1 = LeftSidePic.hdc
Rtn = StretchBlt(hDC2, 0, TopCaptionPic.ScaleHeight, LeftSidePic.ScaleWidth - 1, LeftSidePic.ScaleHeight, hDC1, 0, 0, LeftSidePic.ScaleWidth, LeftSidePic.ScaleHeight, SRCCOPY)
hDC1 = RightSidePic.hdc
Rtn = StretchBlt(hDC2, Me.ScaleWidth - RightSidePic.ScaleWidth + 1, TopCaptionPic.ScaleHeight, RightSidePic.ScaleWidth - 1, RightSidePic.ScaleHeight, hDC1, 0, 0, RightSidePic.ScaleWidth, RightSidePic.ScaleHeight, SRCCOPY)
hDC1 = BottomSidePic.hdc
Rtn = StretchBlt(hDC2, 0, Me.ScaleHeight - BottomSidePic.ScaleHeight, Me.ScaleWidth, BottomSidePic.ScaleHeight, hDC1, 0, 0, BottomSidePic.ScaleWidth, BottomSidePic.ScaleHeight, SRCCOPY)
Me.Refresh
...全文
502 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2020-03-13
  • 打赏
  • 举报
回复
我自己把解决了,在resize事件合适的地方加上cls即可,没有用到 Paint事件,避免出现层叠事件。 刚开始,Autoredraw和Refresh都不管用,我查了一下MSDN上这么说的: Paint 事件 在一个对象被移动或放大之后,或在一个覆盖该对象的窗体被移开之后,该对象部分或全部暴露时,此事件发生。 语法 Private Sub Form_Paint( ) Private Sub object_Paint([index As Integer]) Paint 事件语法包括下列部分: 部分 描述 object 一个对象表达式,其值是“应用于”列表中的一个对象。 index 一个整数,用来唯一地标识一个在控件数组中的控件。 说明 如果需要代码中各种图形方法的输出,则 Paint 事件过程就很有用。使用 Paint 过程,可以确保这样的输出在必要时能被重绘。 使用 Refresh 方法时,Paint 事件即被调用。如果 AutoRedraw 属性被设置为 True,重新绘图会自动进行,于是就不需要 Paint 事件。 如果 ClipControls 属性被设置为 False,在 Paint 事件过程中的绘图方法仅影响该窗体中新暴露的区域;否则,绘图方法将在该窗体未被控件覆盖的所有区域。( Image、Label、Line 和 Shape 控件除外。) 在 Resize 事件过程中使用 Refresh 方法可在每次调整窗体大小时强制对整个对象进行。 注意 对某些任务使用 Paint 事件过程能导致一个层叠事件。通常来说,在下列情况下,要避免用 Paint 事件过程: 移动一个窗体或控件,或者是调整其大小。 对影响大小或外观的任何变量进行改变,如:设置对象的 BackColor 属性等。 调用 Refresh 方法。 对上述这些任务来说,Resize 事件可能更为合适。

1,488

社区成员

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

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