本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] MFCでのスクロールバーの操作

文書番号: 403860

最終更新日: 1999/03/19


この資料は以下の製品について記述したものです。


この記事は、以前は次の ID で公開されていました: JP403860

概要

この資料は、MFC でのプログラミングでスクロールバーの操作の一例を紹介したもの です。

詳細

<QUESTION>

AppStudio でダイアログ上にスクロールバーを作成し、ClassWizard で DDX でコント ロールの設定をしようとしたのですが、「変数の追加」で表示されません。また、
処理を設定しようとして、スクロールバーの ID を選択してもメッセージ一覧には
何も表示されません。そこで自分で OnInitDialog の中で
GetDlgItem(スクロールバー ID)->SetScrollRange(0,100);
と設定したので
すが、表示されたダイアログ上のスクロールバーを操作してもバーが動きません。
もうどうしてよいかまったくわかりません。

<ANSWER>

他のコントロールとは異なり、ClassWizard 上でスクロールバーを処理できない理由 は、基本的にその必要がないからです。なぜならスクロールバーがマウスなどで操作 された時のメッセージは全て親であるダイアログに送られるからです。つまり
OnHScroll(), OnVScroll() などが親ウィンドウに送られ、そのパラメータとして
CScrollBar * が渡されてきます。そのポインタを使ってスクロールバーを操作する
のです。ですからリソース ID も知る必要はありません。
スクロールバーのつまみ部分などは操作しても自動的には移動しません。
全てユーザが処理してあげなくてはいけません。以下に例を示します。
  //ダイアログのクラス
  class CMyDialog : public CDialog {
      int myScrollPos: // スクロールバーのつまみの現在の位置
      // 横スクロールバーが操作された時のメッセージ処理関数
      afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
          :
  }
  // 横スクロールバーが操作された時の処理
  void CAboutDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
  {
      // pScrollBar が NULL ならウィンドウやダイアログに付加されている
      // スクロールバーなのでここでは何もしない
      if( pScrollBar == NULL)
      {
          CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
          return;
      }
    // スクロールバーが動かされた処理によって現在の位置を計算する
      // スクロールバーの値の範囲はデフォルトで 0 ~ 100 です。
      switch( nSBCode )
      {
          case SB_LEFT: // 左端にきた
              myScrollPos = 0;
              break;
          case SB_RIGHT: // 右端にきた
              myScrollPos = 100;
              break;
          case SB_PAGELEFT: // つまみの左の余白が押された
              myScrollPos -= 10; // わざと break していない
          case SB_LINELEFT: // 左矢印ボタンが押された
              myScrollPos = max(0, myScrollPos - 1);
              break;
          case SB_PAGERIGHT:
              myScrollPos += 10;
          case SB_LINERIGHT:
              myScrollPos = min(100, myScrollPos +1 );
              break;
          case SB_THUMBPOSITION:
          case SB_THUMBTRACK:
              myScrollPos = (int)nPos;
              break;
      }
      // 自分で描画する
      pScrollBar -> SetScrollPos(myScrollPos);
  }

詳細

  • Visual C++ は、米国 Microsoft Corporation の商標です。

Keywords: KBHOWTO VC10 VC15 VC20 KB403860
Technology: kbAudDeveloper kbvc150 kbVC32bitSearch kbVCsearch

inserted by FC2 system