CDC::ScrollDC + CScrollBar: проблемы.
Код:
void CImg_recogn_win32Dlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
//dc.SetViewportOrg( 0, 0 );
dc.SetViewportExt( 300, h );
dc.SetWindowExt( 300, h );
dc.BitBlt( 0, 0, 300, 200, &virt_dc1, 0, 0, SRCCOPY );
afx_msg void CImg_recogn_win32Dlg::OnVScroll( UINT code, UINT pos, CScrollBar *sb )
{
CClientDC dc( this );
if( !sb ) return;
p_old = p;
int p = pos;
switch( code )
{
case SB_LINEUP:
p--;
if( p < 0 ) p = 0;
break;
case SB_LINEDOWN:
p++;
if( p > h ) p = h;
break;
case SB_PAGEUP:
p -= 10;
if( p < 0 ) p = 0;
break;
case SB_PAGEDOWN:
p += 10;
if( p > h ) p = h;
break;
}
sb->SetScrollPos( p );
int dy = p_old - p;
CRect scroll_rect( 0, 0, 300, 200 );
CRect update_rect( 0, p, 300, p + 200 );//если это убрать то скроллинг идет
CRect cliping_rect( 0, p, 300, p + 200 );//но содержимое не обновляется,
//а идет фоном
dc.ScrollDC( 0, dy, &scroll_rect, &cliping_rect, 0, 0 );
}
{
CPaintDC dc(this); // device context for painting
//dc.SetViewportOrg( 0, 0 );
dc.SetViewportExt( 300, h );
dc.SetWindowExt( 300, h );
dc.BitBlt( 0, 0, 300, 200, &virt_dc1, 0, 0, SRCCOPY );
afx_msg void CImg_recogn_win32Dlg::OnVScroll( UINT code, UINT pos, CScrollBar *sb )
{
CClientDC dc( this );
if( !sb ) return;
p_old = p;
int p = pos;
switch( code )
{
case SB_LINEUP:
p--;
if( p < 0 ) p = 0;
break;
case SB_LINEDOWN:
p++;
if( p > h ) p = h;
break;
case SB_PAGEUP:
p -= 10;
if( p < 0 ) p = 0;
break;
case SB_PAGEDOWN:
p += 10;
if( p > h ) p = h;
break;
}
sb->SetScrollPos( p );
int dy = p_old - p;
CRect scroll_rect( 0, 0, 300, 200 );
CRect update_rect( 0, p, 300, p + 200 );//если это убрать то скроллинг идет
CRect cliping_rect( 0, p, 300, p + 200 );//но содержимое не обновляется,
//а идет фоном
dc.ScrollDC( 0, dy, &scroll_rect, &cliping_rect, 0, 0 );
}
--------------------------------------------------------------------------------
если не убирать то тоже не обновляется.
Поясните пожалуста что же значат update_rect, cliping_rect, update_rgn. И как их использовать. RTFM читал.