Private Declare Function Rectangle Lib "gdi32" (ByVal hdc As Long, ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Dim a As Boolean
Private Sub Form_Load()
    Shape1.BackStyle = 1
End Sub
Private Sub Command1_Click()
    Me.Cls
    Rectangle Me.hdc, 100, 100, 200, 200
    a = True
End Sub
Private Sub Form_Paint()
    If a = True Then
        Call Command1_Click
    End If
End Sub
_______________________________
在窗体的适当位置放一个控件shape1和一个command1,注意:shape1的位置要与按command1后绘制的矩形有部分重叠.
问题:在按command1后,绘制的矩形在shape1控件的上面,为什么在调整窗体大小时,绘制的矩形却在shape1的后面了,有什么办法在调整窗体大小时,绘制的矩形仍旧在shape1的上面.
(排除在form_resize事件中调用Call Command1_Click,原因是如果这个程序被其它应用程序覆盖后,绘制的矩形就不见了).

解决方案 »

  1.   

    AutoRedraw 属性为 False时,图形方法输出或API绘图,会在shape1顶层显示
    AutoRedraw 属性为 True时,图形方法输出或API绘图,会在shape1底层显示你用得方法,没必要使用a = True做标志,因为AutoRedraw 属性为 False时,要维持图形输出内容不变,是必须在Paint事件中重绘的。从编程实践的角度,我建议你最好不要采用API与图形控件混用方式。
      

  2.   

    您好,即使autoredraw=false,在单击command1时,绘图在shape1顶层显示,但是在调整窗体大小时,还是会显示到shape1底层.
      

  3.   

    我要的结果就是在调整窗体大小时,仍旧让绘图显示在shape1上面.
    (排除在form_resize事件中调用Call Command1_Click,原因是如果这个程序被其它应用程序覆盖后,绘制的矩形就不见了).