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; } } ・・・・ }