2013-08-28 59 views
1

我在Win32中創建一個進度條,當它在Release配置中構建應用程序但在Debug配置中工作時它不會更新。進度條被創建如下:在Win32中不更新的進度條

progBar= CreateWindowEx(0,PROGRESS_CLASS,NULL,WS_CHILD | WS_VISIBLE|PBS_SMOOTH,rc.right/2-130,rc.bottom/2, 260, 17,hWnd, NULL, hInst, NULL); 

     //Sets the range of progress bar 
     SendMessage(progBar, PBM_SETRANGE, 0, MAKELPARAM(0,10)); //0->min value; 10->max value 
     SetTimer(hWnd, TIMER_1, 1000, TimerProc);     //set the timer 

和我的TimerProc是:

void CALLBACK TimerProc(HWND hWnd, UINT msg, UINT idEvent, DWORD dwTime) 
{ 

switch(msg) 
{ 
    case WM_TIMER: 
    { 
     SendMessage(progBar, PBM_SETPOS,stepValue,0);  //stepValue 
     InvalidateRect(progBar,NULL,TRUE); 

     if(stepValue>9) 
     { 
      stepValue=0; 
     } 

     else 
     { 
      stepValue++; 
     } 
    } 
    } 
    return; 
} 

我使用Visual Studio 2010.Is可能我錯過了一些圖書館,因爲它工作在調試配置。我選擇的運行時庫是多線程(/ MT)

+1

嘗試調試發佈配置。從這裏的代碼我只能考慮未初始化的stepValue變量,但調試器可以告訴你更多。 –

+1

刪除InvalidateRect()調用並確保初始化stepValue。使用調試器。只是不要這樣做,這已經被PBM_SETMARQUEE消息所支持。 –

+1

'WM_TIMER'消息優先級低。它們僅在消息隊列爲空時生成。您是否驗證了在發佈版本中創建了「WM_TIMER」消息? – IInspectable

回答

1

根據漢斯我嘗試了字幕樣式進度欄,它的工作。該代碼的變化將是如下:

 progBar= CreateWindowEx(0,PROGRESS_CLASS,NULL,WS_CHILD | WS_VISIBLE|PBS_MARQUEE,rc.right/2-130,rc.bottom/2, 260, 17,hWnd, NULL, hInst, NULL); 

     SendMessage(progBar, PBM_SETMARQUEE,TRUE,50); 

和我刪除了SetRange statement.According這個鏈接

http://social.msdn.microsoft.com/Forums/vstudio/en-US/407cf8d0-02cc-4276-adb1-3fc619ce4f3a/progress-bar-with-marquee-style

我不得不添加

#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"") 

否則跑馬燈進展酒吧不起作用。有人能解釋這一點嗎?但這對我來說也適用於Release版本。