0
我想使用CSliderCtrl實現一個視頻播放器,它顯示播放和下載進度。視頻播放時拇指會移動,而頻道會隨着視頻文件下載而改變。我參考這篇文章1,但該頻道只能在事件處理程序中繪製,但是,我想在接收大量文件時繪製頻道。所以我想知道如何在運行時而不是在處理程序中檢索通道。 在mfc中繪製CSliderCtrl的頻道
我想使用CSliderCtrl實現一個視頻播放器,它顯示播放和下載進度。視頻播放時拇指會移動,而頻道會隨着視頻文件下載而改變。我參考這篇文章1,但該頻道只能在事件處理程序中繪製,但是,我想在接收大量文件時繪製頻道。所以我想知道如何在運行時而不是在處理程序中檢索通道。 在mfc中繪製CSliderCtrl的頻道
與其他所有者繪製的控件一樣,您需要在自定義繪圖均勻處理程序上繪製所有內容。 Codeproject上的這個自定義類也不例外。
爲了適應這種情況,您需要在父窗口中創建一個成員變量,該變量將保存已經下載的塊的大小以及文件的大小。例如。
class CMyDialog: CDialog
{
private:
int nBytes; // downloaded bytes
int nSize; // total size of the file
}
當您收到一個塊時,您會相應地增加nBytes。
在滑塊控件的自定義繪圖處理程序中,您可以使用這些變量來偏移通道位置。基本上,正如文章的作者所建議的,您只需繪製矩形。筆者用一個矩形,你會使用兩個(左和右矩形)與不同的畫筆
實際的訣竅是迫使滑塊每次收到大塊時間重繪繪製。您需要使用Invalidate:
m_myslider.Invalidate();
感謝您的回覆!我嘗試過使用Invalidate(),但它不起作用。每次調用Invalidate()時,OnCustomdraw()處理程序似乎都不會被調用。 – yelo
嘗試對整個窗口調用invalidate – cha