小弟正在做一个视屏播放器,用的控件是windows media player,窗口右边一小部分是播放列表,列表用list控件做的。我现在想把它做的和微软的mediaplayer一样能够点击中间的分隔栏实现播放列表的隐藏与出现,同时也能够使播放控件的大小能够随着操作动态的调整。请问该怎么做呢?
media player中间的分隔栏是如何实现的呢?

解决方案 »

  1.   

    中间的分隔栏可以用按钮或文本框,做的窄一些,
    当点击分隔栏的时候,
    使播放控件变大,
    并且使列表框隐藏,
    参考代码如下:
    假定播放控件IDC_PLAY,
    列表控件IDC_LIST,
    分隔栏IDC_SPERATOR
    CXXXDlg::OnXXX()
    {
        CRect rcList, rcPlay;
        GetDlgItem(IDC_LIST)->GetWindowRect(rcList);
        GetDlgItem(IDC_PLAY)->GetWindowRect(rcPlay);
        GetDlgItem(IDC_LIST)->ShowWindow(SW_HIDE);
        GetDlgItem(IDC_PLAY)->MoveWindow(rcList.Left()+rcPlay.Left, rcPlay.Top(), rcList.Width()+rcPlay.Width(), rcPlay.Height());
    }
      

  2.   

    碰到一个新问题:我播放的控件是windows media player。按照下面方式:GetDlgItem(IDC_OCX1)->GetClientRect(&lp);和GetDlgItem(IDC_OCX1)->GetWindowRect(&lp);
    获取它的位置都得到断言错误:
    _AFXWIN_INLINE void CWnd::GetClientRect(LPRECT lpRect) const
    { ASSERT(::IsWindow(m_hWnd)); ::GetClientRect(m_hWnd, lpRect); }
    这是什么原因呢?控件的hwnd无效吗?