最好使用多线程来实现,CreateProcess和CreateThread创建新的进程和线程.

解决方案 »

  1.   

    我是低手,希望没有打扰。
    用API就复杂了,不是一个函数就能达到的。VB的语法我不太熟,我用C的语法,希望你能看得懂:void DoEventsInC()
    {
      MSG msg;  while( PeekMessage(&msg, hWnd, 0, 0, PM_NOREMOVE) ) 
      {
        if(Msg.Message==WM_QUIT)
          break;
          
        GetMessage(&msg, hWnd, 0, 0);
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
    }
      

  2.   

    aborigine:我想达到的效果是:我执行了Me.Caption="kkk",紧接着执行一个很复杂的操作,我的目的仅仅是让"kkk"显示在窗体的标题栏上(如果没有DoEvents,则窗体的标题栏会在我的复杂的操作完成后才显示"kkk")。
    agui:你的函数好象是把和该窗体有关的消息全部押后处理。而我的要求恰恰相反,我是要把所有的消息都处理完,然后继续执行我的程序。
      

  3.   

    setwindowpos hwnd,0,0,0,0,0,swp_nosize _
        or swp_nomove or swp_nozorder or swp_drawframe
      

  4.   

    >>我想达到的效果是:我执行了Me.Caption="kkk",紧接着执行一个很复杂的操作,我的>>目的仅仅是让"kkk"显示在窗体的标题栏上(如果没有DoEvents,则窗体的标题栏会在>>我的复杂的操作完成后才显示"kkk")。"kkk"没有显示,是因为来不及显示,所以你可以抢先再复杂操作之前刷新一下这个控件(不知是什么控件).
    刷新的方法,我对vb不熟,大概应该是Me.Refresh;
      

  5.   

    还是用多线程效果较好,主线程处理消息,创建一个线程在后台专门执行复杂操作.不会有任何延迟感,要完成你所提的任务,即使用API也不复杂.我对VB不是很熟悉,你可去参考一本叫<<Visual Basic5 API编程指南>>的书.
      

  6.   

    while ( bDoingBackgroundProcessing ) 

        MSG msg;
        while ( ::PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) ) 
        { 
            if ( ::GetMessage(&msg, NULL, 0, 0)==0 )
            { 
                bDoingBackgroundProcessing = FALSE; 
                ::PostQuitMessage( ); 
                break; 
            } 
        } 
        LONG lIdle = 0;
        while ( DoIdle(lIdle++ ) )
            ;
    }
      

  7.   

    你可以建立一个ActiveX EXE部件来完成你需要完成的复杂的操作,由于ActiveX EXE部件是线程之外运行的,所以不会影响主程序的运行,并且两个程序之间可以进行数据的交换。