First, add CExtScrollBar
members to the class declaration:
...
CExtScrollBar m_wndScrollBarH, m_wndScrollBarV;
...
Then override the
GetScrollBarCtrl
virtual method:
...
virtual CScrollBar * GetScrollBarCtrl(int nBar) const;
...
CScrollBar * CAviView::GetScrollBarCtrl(int nBar) const
{
ASSERT_VALID( this );
if( m_hWnd == NULL || (! ::IsWindow(m_hWnd) ) )
return NULL;
ASSERT( nBar == SB_HORZ || nBar == SB_VERT );
if( nBar == SB_HORZ )
{
if( m_wndScrollBarH.GetSafeHwnd() != NULL )
return ( const_cast < CExtScrollBar * > ( &m_wndScrollBarH ) );
}
else
{
if( m_wndScrollBarV.GetSafeHwnd() != NULL )
return ( const_cast < CExtScrollBar * > ( &m_wndScrollBarV ) );
}
return NULL;
}
...
The last step is to reate scroll bars in the
OnCreate()
method
...
int CAviView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if( CBaseView::OnCreate(lpCreateStruct) == -1 )
return -1;
//////////////////////
m_wndScrollBarH.m_eSO = CExtScrollBar::__ESO_BOTTOM;
m_wndScrollBarV.m_eSO = CExtScrollBar::__ESO_RIGHT;
if( ! m_wndScrollBarV.Create(
WS_CHILD | WS_VISIBLE | SBS_VERT | SBS_RIGHTALIGN,
CRect(0,0,0,0),
this,
1))
{
ASSERT( FALSE );
return -1;
}
if( ! m_wndScrollBarH.Create(
WS_CHILD | WS_VISIBLE | SBS_HORZ | SBS_BOTTOMALIGN,
CRect(0,0,0,0),
this,
2))
{
ASSERT( FALSE );
return -1;
}
m_wndScrollBarH.SyncReservedSpace( &m_wndScrollBarV );
m_wndScrollBarV.SyncReservedSpace( &m_wndScrollBarH );
...
return 0;
}