2013-10-16 62 views
0

我想使用CSliderCtrl實現一個視頻播放器,它顯示播放和下載進度。視頻播放時拇指會移動,而頻道會隨着視頻文件下載而改變。我參考這篇文章1,但該頻道只能在事件處理程序中繪製,但是,我想在接收大量文件時繪製頻道。所以我想知道如何在運行時而不是在處理程序中檢索通道。 effect在mfc中繪製CSliderCtrl的頻道

回答

1

與其他所有者繪製的控件一樣,您需要在自定義繪圖均勻處理程序上繪製所有內容。 Codeproject上的這個自定義類也不例外。

爲了適應這種情況,您需要在父窗口中創建一個成員變量,該變量將保存已經下載的塊的大小以及文件的大小。例如。

class CMyDialog: CDialog 
{ 
private: 
    int nBytes; // downloaded bytes 
    int nSize; // total size of the file 
} 

當您收到一個塊時,您會相應地增加nBytes。

在滑塊控件的自定義繪圖處理程序中,您可以使用這些變量來偏移通道位置。基本上,正如文章的作者所建議的,您只需繪製矩形。筆者用一個矩形,你會使用兩個(左和右矩形)與不同的畫筆

實際的訣竅是迫使滑塊每次收到大塊時間重繪繪製。您需要使用Invalidate

m_myslider.Invalidate(); 
+0

感謝您的回覆!我嘗試過使用Invalidate(),但它不起作用。每次調用Invalidate()時,OnCustomdraw()處理程序似乎都不會被調用。 – yelo

+0

嘗試對整個窗口調用invalidate – cha