void FsClearEventQueue(void) { for(;;) { int checkAgain=0; FsPollDevice(); int lb,mb,rb,mx,my; while(FSMOUSEEVENT_NONE!=FsGetMouseEvent(lb,mb,rb,mx,my) || FSKEY_NULL!=FsInkey() || 0!=FsInkeyChar() || 0!=FsCheckWindowExposure()) { checkAgain=1; } if(0!=lb || 0!=rb || 0!=mb) { checkAgain=1; } if(0!=FsCheckKeyHeldDown()) { checkAgain=1; } if(0==checkAgain) { break; } FsSleep(50); } }
int main(int ac,char *av[]) { FsLazyWindowApplicationBase::GetApplication()->BeforeEverything(ac,av); FsOpenWindowOption owo; owo.useDoubleBuffer=true; FsLazyWindowApplicationBase::GetApplication()->GetOpenWindowOption(owo); FsOpenWindow(owo); FsLazyWindowApplicationBase::GetApplication()->Initialize(ac,av); // Memo: Don't register call backs before Initialize. // Some of the call-back functions may be accidentally fired from inside FsOpenWindow. FsRegisterIntervalCallBack(IntervalCallBack,nullptr); FsRegisterOnPaintCallBack(NeedRedrawCallBack,nullptr); FsRegisterCloseWindowCallBack(UserWantToCloseProgram,nullptr); auto t0=FsSubSecondTimer(); while(0!=FsCheckWindowOpen() && true!=FsLazyWindowApplicationBase::GetApplication()->MustTerminate()) { auto t=FsSubSecondTimer(); auto passed=t-t0; t0=t; FsPollDevice(); FsLazyWindowApplicationBase::GetApplication()->Interval(); if(0!=FsCheckWindowExposure() || true==FsLazyWindowApplicationBase::GetApplication()->NeedRedraw()) { FsLazyWindowApplicationBase::GetApplication()->Draw(); } auto sleepMS=FsLazyWindowApplicationBase::GetApplication()->GetMinimumSleepPerInterval(); if(sleepMS>passed) { FsSleep(sleepMS-(int)passed); } } FsLazyWindowApplicationBase::GetApplication()->BeforeTerminate(); FsCloseWindow(); return 0; }