有没有类似于MFC里面的Invalidate

解决方案 »

  1.   


    Private Sub Form_Load()
       Me.AutoRedraw = True  '持久输出
    End Sub
      

  2.   

    将窗口的autoredraw属性设置为True
      

  3.   

    其实你可以在VB里使用一些API和消息通知来实现刷新。如果期望刷新的结果立即显示出来,那么可以通过2个方法:1、将绘制相关代码全部放在 Form_Paint 这个事件中,其实此时不需要什么API,只要Form1.Refresh 就可以再次执行这个事件里的代码了(如果需要不同的显示,那么可以设置多个公共变量,显示不同的时期的样式就设置某个变量为不同的值,然后 Paint 中根据该值执行不同代码)
    2、将AutoReDraw设置为TRUE,此时无论代码写在哪,都能将改变立即反映,但是如果程序中设计到调用 Form1.hDC 的时候可能会出问题(比如你有内存图片数据向这个 HDC发送,结果发现发送不上去),这个原因开始我也纳闷过,后来才知道 AutoReDraw设置为TRUE 时获取的 HDC仅是个伪HDC,是获取不到实际的HDC的,详细信息请看我一篇求助:http://topic.csdn.net/u/20090417/00/99c840a0-d0dd-4379-903a-edfa139765e4.html
      

  4.   

    Form1.Refresh,哈哈,估计我要的就是这个。
      

  5.   


    Public Const WM_SETREDRAW = &HB
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
    Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long
    '停止刷新
    Call SendMessage(frm.hwnd, WM_SETREDRAW, false, 0&)
    '开启刷新
    Call SendMessage(frm.hwnd, WM_SETREDRAW, true, 0&)
    '刷新
    frm.refresh