(原创)漫步视频播放器进度条的制作 心得

0、前言
今天在做进度条的时候,需要一些小困难,毕竟原来的进度条是根据vlc中的事件libvlc_MediaPlayerPositionChanged来让进度条的值+1的 可是要用一个项目中提供的exe,所以在这个项目中只能调用管道进行和exe的通信,这样,使用事件的方式基本被排除了
1、思路
既然不能用事件,那么就直接用定时器了,设定为1000ms来触发一次,进度条+1,只改变UI,可以先试试不加锁
2、实现

在UI中加入一个播放的标识,也就是UI中进度条被触发的时候(没播放的时候,UI中进度条是不被绘制的),设置为true,播放停止的时候为false。

那这样我们的定时器事件就好办多了:


VOID CALLBACK TimeProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTimer)  
{  
    if (g_dui_frame_wnd->GetIsPlayStatus())  
    {  
        // 这里调用增加进度条数值   
        g_dui_frame_wnd->OnPosChanged(hWnd, 0, 0);  
    }  
}  

VOID CALLBACK TimeProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTimer) { if (g_dui_frame_wnd->GetIsPlayStatus()) { // 这里调用增加进度条数值 g_dui_frame_wnd->OnPosChanged(hWnd, 0, 0); } }

在主循环创建窗口完毕之后,马上设定定时器:


int timer_sign = 1;  
SetTimer(0, timer_sign, 1000, TimeProc);  
int timer_sign = 1; SetTimer(0, timer_sign, 1000, TimeProc);

在OnPosChanged函数中,让进度条的值+1即可


LRESULT CDuiFrameWnd::OnPosChanged(HWND hwnd, WPARAM wParam, LPARAM lParam )  
{  
    m_pSliderPlay->SetValue(m_pSliderPlay->GetValue() + 1);  
    return TRUE;  
}  
LRESULT CDuiFrameWnd::OnPosChanged(HWND hwnd, WPARAM wParam, LPARAM lParam ) { m_pSliderPlay->SetValue(m_pSliderPlay->GetValue() + 1); return TRUE; }
3、测试的效果



测试效果还不错,点击进度提进行seek之后,也能继续+1

大家自己动手试试 希望帮助到您

评论

© km258369 | Powered by LOFTER