CWnd::OnHScroll

更新 : 2007 年 11 月

ユーザーがウィンドウの水平スクロール バーをクリックしたときに、フレームワークからこのメンバ関数が呼び出されます。

afx_msg void OnHScroll(
   UINT nSBCode,
   UINT nPos,
   CScrollBar* pScrollBar 
);

パラメータ

  • nSBCode
    スクロール要求を示すスクロール バーのコードを指定します。このパラメータには、次のいずれかの値を指定できます。

    • SB_LEFT   左端へスクロール。

    • SB_ENDSCROLL   スクロール終了。

    • SB_LINELEFT   左へスクロール。

    • SB_LINERIGHT   右へスクロール。

    • SB_PAGELEFT   1 ページ左へスクロール。

    • SB_PAGERIGHT   1 ページ右へスクロール。

    • SB_RIGHT   右端へスクロール。

    • SB_THUMBPOSITION   絶対位置へスクロール。現在位置はパラメータ nPos で指定されます。

    • SB_THUMBTRACK   スクロール ボックスを指定位置へドラッグ。現在位置はパラメータ nPos で指定されます。

  • nPos
    スクロール バーのコードが SB_THUMBPOSITION または SB_THUMBTRACK の場合は、スクロール ボックスの位置を指定します。それ以外の場合は使いません。初期スクロール範囲によっては、nPos が負になることもあるので、必要に応じて int にキャストします。

  • pScrollBar
    スクロール バー コントロールからメッセージが送られた場合は、コントロールへのポインタになります。ユーザーがウィンドウのスクロール バーをクリックした場合は、このパラメータは NULL になります。このポインタは一時的である場合があるので、後で使用するために保持しておくことはできません。

解説

スクロール バーのコード SB_THUMBTRACK は、通常、スクロール ボックスがドラッグされている間にそのフィードバックを与えるアプリケーションによって使われます。

アプリケーションがスクロール バーにより制御される内容をスクロールする場合は、スクロール ボックスの位置も SetScrollPos メンバ関数を使って設定する必要があります。

e14hhbe6.alert_note(ja-jp,VS.90).gifメモ :

このメンバ関数は、アプリケーションが Windows メッセージを処理できるようにするためにフレームワークによって呼び出されます。この関数に渡されるパラメータの値は、フレームワークがメッセージ受信時に受け取ったパラメータの値に基づいています。この関数の基本クラスの実装を呼び出した場合は、関数に渡したパラメータではなく、メッセージと共に渡されたパラメータ自体が使用されます。

使用例

void CMdiView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
   // Get the minimum and maximum scroll-bar positions.
   int minpos;
   int maxpos;
   GetScrollRange(SB_HORZ, &minpos, &maxpos); 
   maxpos = GetScrollLimit(SB_HORZ);

   // Get the current position of scroll box.
   int curpos = GetScrollPos(SB_HORZ);

   // Determine the new position of scroll box.
   switch (nSBCode)
   {
   case SB_LEFT:      // Scroll to far left.
      curpos = minpos;
      break;

   case SB_RIGHT:      // Scroll to far right.
      curpos = maxpos;
      break;

   case SB_ENDSCROLL:   // End scroll.
      break;

   case SB_LINELEFT:      // Scroll left.
      if (curpos > minpos)
         curpos--;
      break;

   case SB_LINERIGHT:   // Scroll right.
      if (curpos < maxpos)
         curpos++;
      break;

   case SB_PAGELEFT:    // Scroll one page left.
   {
      // Get the page size. 
      SCROLLINFO   info;
      GetScrollInfo(SB_HORZ, &info, SIF_ALL);

      if (curpos > minpos)
      curpos = max(minpos, curpos - (int) info.nPage);
   }
      break;

   case SB_PAGERIGHT:      // Scroll one page right.
   {
      // Get the page size. 
      SCROLLINFO   info;
      GetScrollInfo(SB_HORZ, &info, SIF_ALL);

      if (curpos < maxpos)
         curpos = min(maxpos, curpos + (int) info.nPage);
   }
      break;

   case SB_THUMBPOSITION: // Scroll to absolute position. nPos is the position
      curpos = nPos;      // of the scroll box at the end of the drag operation.
      break;

   case SB_THUMBTRACK:   // Drag scroll box to specified position. nPos is the
      curpos = nPos;     // position that the scroll box has been dragged to.
      break;
   }

   // Set the new position of the thumb (scroll box).
   SetScrollPos(SB_HORZ, curpos);

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

必要条件

ヘッダー : afxwin.h

参照

参照

CWnd クラス

階層図

CWnd::SetScrollPos

CWnd::OnVScroll

WM_HSCROLL

その他の技術情報

CWnd のメンバ