我想在窗口上动态画一条线!!我是这么写的:.......
case WM_PAINT:
......
for(i=0;i<400;i++)
{
  lineto(hdc,i,i);
  sleep(10);
}
.........
用sleep是想产生一个动画效果,但是我发现在运行的时候,窗口不能响应其他操作,连关闭也不行,要等到这个循环结束了,才能进行其他操作,是不是因为用了sleep的关系??
那如果我既想实现上述功能,又想在运行期间窗口可以响应其他操作,请问应该怎么做?

解决方案 »

  1.   

    1、放在 Timer 里;
    2、放在 Thread 里。
      

  2.   

    开始的时候SetTimer(NULL, 1, 10, NULL);
    响应WM_TIMER消息:OnTimer函数:
    {lineto();
    }
    最后KillTimer();
      

  3.   

    把i设为类的成员变量,每lineto ()一次i++
      

  4.   

    呵呵。很正常。sleep是个休眠函数。它会让当前的线程休眠指定的时间如果不想出现无法响应的情况请重新开辟新的线成然后指定线成的级别低于普通级别就不会出现无法响应的现象了。
      

  5.   

    那再请问一下,是用SetTimer好还是用多线程好?
      

  6.   

    MSG Message;
    for(int i = 0; i < 100 ; i++)
    {
    if (::PeekMessage(&Message,NULL,0,0,PM_REMOVE)) 
    {
    ::TranslateMessage(&Message);
    ::DispatchMessage(&Message);
    }
    Sleep(100);
    }
      

  7.   

    技术上可行
    符合你的要求吗?
    如果不明白
    请给我发短消息
    请附: 帖子的地址
    或根据http://www.vcshare.net上的联系方式与我联系
      

  8.   

    //用线程去画线,不会形影响主界面.
    HANDLE handle;
    DWORD threadId;
    handle = CreateThread(NULL,        //create worker thread.
                          0,
                          ThreadFunc,  //thread process function
                          (LPVOID)1,
                          0,
                          &threadId);if(handle != NULL)
       CloseHandle(handle);           //close handle thread.
    else
      MessageBox(hwnd,"Thread create defeated!","Info",MB_OK);
    //thread process function.
    DWORD WINAPI ThreadFunc(LPVOID lParam)
    {
        for(int i=0;i<100;i++)
        {
           LineTo(hwnd,i,i);
           Sleep(100);
        } 
        return 0;
    }