VC++6。コードはあくまでサンプル。
メンバ変数としてCScrollBarを追加
CScrollBar m_wndScrollLR
resource.hにID追加
#define IDC_WNDSCROLLLR 7050
汎用的なサイズ設定関数の作成。
ことあるごとに呼ぶことになる。
#define HSCROLLBAR_HIGHT (16)
void ***::SetSize(){
// スクロールバー
if( ::IsWindow( m_wndScrollLR.m_hWnd ) ){
tmpRect = baseRect;
tmpRect.top = tmpRect.bottom - HSCROLLBAR_HIGHT;
m_wndScrollLR.MoveWindow( &tmpRect );
}
}OnCreate()でCreateする
CRect baseRect; GetClientRect( baseRect ); ・・・ m_wndScrollLR.Create( SBS_HORZ , baseRect , this , IDC_WNDSCROLLLR ); // 水平スクロールバー m_wndScrollLR.ShowWindow( SW_SHOW ); this->SetSize();
ウィザードでWM_HSCROLLを選びOnHScroll関数追加
#define SCROLLPIXEL (1)
#define PAGESCROLLPIXEL (SCROLLPIXEL*4)
void ***::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
//if ( pScrollBar == &m_wndScrollLR )
{
int nMax,nMin/*,nPage*/;
switch( nSBCode ){
case SB_LEFT: // 左端へスクロール。
pScrollBar->GetScrollRange( &nMin , &nMax );
pScrollBar->SetScrollPos( nMin );
//redrawGraph();
break;
case SB_LINELEFT: // 左へスクロール。
pScrollBar->SetScrollPos( max( 0 , pScrollBar->GetScrollPos() - SCROLLPIXEL ));
//redrawGraph();
break;
case SB_LINERIGHT: // 右へスクロール。
pScrollBar->SetScrollPos( pScrollBar->GetScrollPos() + SCROLLPIXEL );
//redrawGraph();
break;
case SB_PAGELEFT: // 1 ページ左へスクロール。
pScrollBar->SetScrollPos( max( 0 , pScrollBar->GetScrollPos() - PAGESCROLLPIXEL /*nPage*/ ));
//redrawGraph();
break;
case SB_PAGERIGHT: // 1 ページ右へスクロール。
pScrollBar->SetScrollPos( pScrollBar->GetScrollPos() + PAGESCROLLPIXEL /*nPage*/ );
//redrawGraph();
break;
case SB_RIGHT: // 右端へスクロール。
pScrollBar->GetScrollRange( &nMin , &nMax );
pScrollBar->SetScrollPos( nMax );
//redrawGraph();
break;
case SB_THUMBPOSITION: // 絶対位置へスクロール。現在位置は引数 nPos で指定されます。
pScrollBar->SetScrollPos( nPos );
//redrawGraph();
break;
case SB_THUMBTRACK: // スクロール ボックスを指定位置へドラッグします。現在位置は引数 nPos で指定されます。
pScrollBar->SetScrollPos( nPos );
//redrawGraph();
break;
case SB_ENDSCROLL: // スクロール終了。
break;
}
}
・・・・
}