根据我所知道的,DoEvents首先要保证当前函数保留在堆栈中。
同时放弃控制权,交给系统响应消息。因此,用此函数有时可以调整消息的响应,而不需要API,巴顿就在它网站(www.easthot.net)中给过这样的例子。
同时,此函数还能根据当前进程中的窗体句柄确定程序显示的窗体数。
因此,有时不需要用Forms集合。巴顿在www.easthot.net回复时也用过这一方便。另外,巴顿还讲过此函数尽可能不要在有ByRef传参方式的函数中使用。原因,大家可以动脑筋想一想。至于后面的东西,我想要以此功能去推才行!
欢迎前去我们的网站:www.easthot.net

解决方案 »

  1.   


    哪来那么麻烦!
    DoEvents一共就这几条语句:private function DoEvents as long
    Dim msg as MSG
    dim count as long
    while PeekMessage(msg, 0, 0, 0,PM_REMOVE)
        if (Not TranslateAccelerator(msg.hwnd, hSysAccel, msg)) then
            TranslateMessage msg
            DispatchMessage msg
        endif
        count = count + 1
    wend
    doevents = count
    end function只是举例,无法运行(因为系统快捷表无法取得)
      

  2.   

    private function DoEvents as long
    Dim msg as MSG
    dim count as long
    while PeekMessage(msg, 0, 0, 0,PM_REMOVE)'API 作用是试图读消息队列,如果没有消息就直接返回    '试图翻译消息(用于快捷键处理)。其中hSysAccel我们无法取得,
        '所以这代码不能执行
        '当然,如果你不想让程序有快捷键功能,去掉这个if,直接翻译消息就可以执行了
        if (Not TranslateAccelerator(msg.hwnd, hSysAccel, msg)) then
            '翻译消息
            TranslateMessage msg
            '投递消息
            DispatchMessage msg
        endif
        '一共处理了多少消息
        count = count + 1
    wend
    '返回处理的消息数目
    doevents = count
    end function