我要在运行按钮中截取四个窗口视频的截图,要一直循环,然后在按停止按钮的时候就停止抓图,可是一直没有办法点停止按钮,该怎么办 

解决方案 »

  1.   

    在该加处理消息的循环中加消息循环,参考下面:#pragma comment(lib,"user32")
    #include <stdio.h>
    #include <time.h>
    #include <sys/timeb.h>
    #include <windows.h>
    char datestr[16];
    char timestr[16];
    char mss[4];
    void log(char *s) {
        struct tm *now;
        struct timeb tb;    ftime(&tb);
        now=localtime(&tb.time);
        sprintf(datestr,"%04d-%02d-%02d",now->tm_year+1900,now->tm_mon+1,now->tm_mday);
        sprintf(timestr,"%02d:%02d:%02d",now->tm_hour     ,now->tm_min  ,now->tm_sec );
        sprintf(mss,"%03d",tb.millitm);
        printf("%s %s.%s %s",datestr,timestr,mss,s);
    }
    VOID CALLBACK myTimerProc1(
      HWND hwnd, // handle of window for timer messages
      UINT uMsg, // WM_TIMER message
      UINT idEvent, // timer identifier
      DWORD dwTime // current system time
    ) {
     log("In myTimerProc1\n");
    }
    VOID CALLBACK myTimerProc2(
      HWND hwnd, // handle of window for timer messages
      UINT uMsg, // WM_TIMER message
      UINT idEvent, // timer identifier
      DWORD dwTime // current system time
    ) {
     log("In myTimerProc2\n");
    }
    int main() {
        int i;
        MSG msg;    SetTimer(NULL,0,1000,myTimerProc1);
        SetTimer(NULL,0,2000,myTimerProc2);
        for (i=0;i<20;i++) {
            Sleep(500);
            log("In main\n");
            if (GetMessage(&msg,NULL,0,0)) {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }    }
        return 0;
    }
    //2012-07-26 17:29:06.375 In main
    //2012-07-26 17:29:06.875 In myTimerProc1
    //2012-07-26 17:29:07.375 In main
    //2012-07-26 17:29:07.875 In myTimerProc2
    //2012-07-26 17:29:08.375 In main
    //2012-07-26 17:29:08.375 In myTimerProc1
    //2012-07-26 17:29:08.875 In main
    //2012-07-26 17:29:08.875 In myTimerProc1
    //2012-07-26 17:29:09.375 In main
    //2012-07-26 17:29:09.890 In myTimerProc2
    //2012-07-26 17:29:10.390 In main
    //2012-07-26 17:29:10.390 In myTimerProc1
    //2012-07-26 17:29:10.890 In main
    //2012-07-26 17:29:10.890 In myTimerProc1
    //2012-07-26 17:29:11.390 In main
    //2012-07-26 17:29:11.890 In myTimerProc2
    //2012-07-26 17:29:12.390 In main
    //2012-07-26 17:29:12.390 In myTimerProc1
    //2012-07-26 17:29:12.890 In main
    //2012-07-26 17:29:12.890 In myTimerProc1
    //2012-07-26 17:29:13.390 In main
    //2012-07-26 17:29:13.890 In myTimerProc2
    //2012-07-26 17:29:14.390 In main
    //2012-07-26 17:29:14.390 In myTimerProc1
    //2012-07-26 17:29:14.890 In main
    //2012-07-26 17:29:14.890 In myTimerProc1
    //2012-07-26 17:29:15.390 In main
    //2012-07-26 17:29:15.890 In myTimerProc2
    //2012-07-26 17:29:16.390 In main
    //2012-07-26 17:29:16.390 In myTimerProc1
    //2012-07-26 17:29:16.890 In main
    //2012-07-26 17:29:16.890 In myTimerProc1
    //2012-07-26 17:29:17.390 In main
    //2012-07-26 17:29:17.890 In myTimerProc2
    //2012-07-26 17:29:18.390 In main
    //2012-07-26 17:29:18.390 In myTimerProc1
    //2012-07-26 17:29:18.890 In main
    //2012-07-26 17:29:18.890 In myTimerProc1
    //2012-07-26 17:29:19.390 In main
    //2012-07-26 17:29:19.890 In myTimerProc2
    [
      

  2.   

    Multiple Threads in the User Interface http://msdn.microsoft.com/zh-cn/library/ms810439.aspx
      

  3.   

    运行死循环阻塞了停止按钮的动作,请在循环体里加入DoEvents函数(https://blog.csdn.net/worldy/article/details/15028745)