我的PROGRESS BAR不是全部重绘,WINAPI

时间:2011-10-09 14:42:04

标签: winapi progress-bar

在我的应用程序中我正在进入一个包含未知数量元素的循环, 所以我正在显示一个进度条来通知该应用程序正在运行,

这个代码工作FINE,progres bar独立令人耳目一新:

do
{                      
   ...
   SendMessage(hPBLoading, PBM_STEPIT, 0, 0);       
   ...
} while(true);

但不幸的是窗口的其余部分没有刷新(由于循环这很明显) 几秒钟后,在Windows 7中,Windows将我的应用视为分解,并在结束循环后返回并刷新,

所以我发现我需要调度消息队列并将代码更改为:

do
{                      
   ...
   SendMessage(hPBLoading, PBM_STEPIT, 0, 0);       
   ...
   us_tmpBreakCounter++;
   ...

   if (us_tmpBreakCounter >= 10)
   {    
      us_tmpBreakCounter = 0;    
      UpdateSomeOtherElementsinWindow();

    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) == TRUE) 
      {
       TranslateMessage(&msg);
       DispatchMessage(&msg);   
      }
   }
} while(true);

它工作正常,应用程序更新并在ex之后刷新。 10个计数因此它永远不会崩溃, 但不幸的是发生了另一个问题,现在PROGRESS BAR没有完全重绘 - 几秒钟后斜面框架消失,请查看下图:

http://mstanisz.website.pl/temp/progressbar_01.jpg

感谢您的帮助! 米。

1 个答案:

答案 0 :(得分:3)

好像你正在使用GUI线程做一些长期任务。那不是一个好习惯。当您想要执行长任务时,请使用工作线程,并让GUI线程在工作程序工作时处理GUI。您将需要做一些额外的工作来处理两个线程之间的同步(如果GUI关闭则停止工作,避免在当前任务结束之前启动任务等等),但这就是它的工作方式。 / p>