スクロールバー・コントロールを使う


 スクロールバーはあらかじめ設定した最小値〜最大値の範囲内で、値を相対的に選択
出来ます。エディットボックスなどの他のコントロールと連動させることで、お馴染みの
スクロール機能を提供することが出来ます。

<サンプル・コード>

メソッドの宣言
public:
  CEdit* myEdit1;         //追加:Edit1コントロール・ポインタ

BOOL CScrollbarDlg::OnInitDialog()
{
	
		 〜 省略 〜
	
	// TODO: 特別な初期化を行う時はこの場所に追加してください。
	//----------------------------------------------
	//追加

	myEdit1 = (CEdit*)GetDlgItem(IDC_EDIT1);    //Editボックス値変更用に宣言
	m_sbar1.SetScrollRange(0,100);              //スクロール範囲を設定
	m_sbar1.SetScrollPos(0);                    //スクロールバーの初期位置を設定

	//ここまで
	
	return TRUE;  // TRUE を返すとコントロールに設定したフォーカスは失われません。
}

void CScrollbarDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	// TODO: この位置にメッセージ ハンドラ用のコードを追加するかまたはデフォルトの処理を呼び出してください
	//--------------------------------------------
	//コードの追加

	int pos;
	const int maxpos = 100;
	char buf[4];

	pos = pScrollBar->GetScrollPos();
	switch(nSBCode){
	case SB_LEFT:       //フォーカスを持っているとき[Home]押下
		pos = 0;        //(このプログラムでスクロールバーがフォーカスを持つことは無い)
		break;		
	case SB_RIGHT:      //フォーカスを持っているとき[Home]押下
		pos = maxpos;   //(このプログラムでスクロールバーがフォーカスを持つことは無い)
		break;
	case SB_LINELEFT:   //左矢印ボタンクリック
		pos--;
		break;
	case SB_LINERIGHT:  //右矢印ボタンクリック
		pos++;
		break;
	case SB_PAGELEFT:   //左頁領域クリック
		pos-=10;
		break;
	case SB_PAGERIGHT:  //右頁領域クリック
		pos+=10;
		break;
	case SB_THUMBPOSITION:  //つまみドラッグで目的地に達した
		pos = nPos;
		break;
	case SB_THUMBTRACK:     //つまみドラッグ中
		//ドラッグ中にリアルタイムで処理したいときに記述。通常不要。
		break;
	case SB_ENDSCROLL:      //スクロールバー処理が終了(毎操作の後に発生)
		//後始末が必要なとき記述。通常不要。
		break;
	}
	if(pos < 0) pos = 0;
	if(pos > maxpos)pos = maxpos;
	pScrollBar->SetScrollPos(pos);

	//Edit1へスクロールバーの位置を出力
	_itoa( pos, buf, 10 );          //int -> char(文字列)に変換
	myEdit1->SetWindowText(buf);    //Edit1へ出力

	//ここまで-------------------------------------

	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}