天天看點

播放器進度條的設計

做了一個播放器的進度條,期間出現了一個很嚴重的問題,現記錄下來供以後溫習。

進度條使用CSliderCtrl控件。CSliderCtrl控件屬于Scroll類型,有page的概念,點選CSliderCtrl進行定位播放的時候獲得的pos是不準備的。這是因為,點選CSliderCtrl定位,滑塊會向滑鼠的方向滑動一個page的大小,而不是定位到滑鼠點選的位置。

處理的方式就是在父視窗的PreTranslateMessage中截取WM_LBUTTONDOWN和WM_LBUTTONUP事件。

根據父視窗的坐标,控件的坐标和消息中滑鼠的坐标,計算出滑塊的pos,然後SetPos将滑塊滑過去。

計算坐标的時候,必須考慮到,CSliderCtrl中的channel與邊框是有距離的,必須把這個距離計算進去,不然pos是不準确的。可以通過CSliderCtrl::GetChannelRect獲得channel的坐标,其中的left就是這個距離。

為避免page問題,可以放棄CSliderCtrl控件,通過CStatic自繪,這就相對複雜一點。

繼續閱讀