2014-05-15 34 views
0

我正在運行msdn的示例代碼。如何重置選框進度條

// Turn the marquee animation on or off. 
void CCProgressCtrl_s1Dlg::OnSetmarqueeOn() 
{ 
    m_progressCtrl.SetMarquee(TRUE, nMarqueeInterval); 
} 

void CCProgressCtrl_s1Dlg::OnSetmarqueeOff() 
{ 
    m_progressCtrl.SetMarquee(FALSE, nMarqueeInterval); 
} 

這可行,但問題是當選取框關閉時,進度條在實例中保持凍結狀態。所以如果移動的光線處於中間位置,它會在那個位置凍結。我想在關閉時重置選取框,但找不到任何功能。我嘗試了SetPos(0),但這也沒有幫助。有一種方法可以在選框進度條重新啓動後重置它?

+0

正確的用戶界面設計是*隱藏*選框樣式進度條,當它不再有用。如果你真的想要,你當然可以重新創建它。 –

+0

@HansPassant這就是我現在正在做的事情,但我正在一個現有的對話框中顯示進度,而不是彈出式對話框,如果我隱藏它,就會出現空白。 – zar

回答

2

您必須刪除ProgressBar的PBS_MARQUEE窗口樣式,例如CWnd::ModifyStyle(),然後才能將位置更改爲所需的任何值。僅當您處於marque模式時啓用PBS_MARQUEE樣式,如果不是,則禁用它。

void CCProgressCtrl_s1Dlg::OnSetmarqueeOn() 
{ 
    m_progressCtrl.ModifyStyle(0, PBS_MARQUEE); 
    m_progressCtrl.SetMarquee(TRUE, nMarqueeInterval); 
} 

void CCProgressCtrl_s1Dlg::OnSetmarqueeOff() 
{ 
    m_progressCtrl.SetMarquee(FALSE, nMarqueeInterval); 
    m_progressCtrl.ModifyStyle(PBS_MARQUEE, 0); 
    m_progressCtrl.SetPos(0); 
}