スクロールバー・コントロールを使う
スクロールバーはあらかじめ設定した最小値〜最大値の範囲内で、値を相対的に選択
出来ます。エディットボックスなどの他のコントロールと連動させることで、お馴染みの
スクロール機能を提供することが出来ます。
<サンプル・コード>
メソッドの宣言
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);
}