Tuesday, April 10, 2012

MFCでスクロールバーのイベント処理

またMFCでのプログラミングについての話です。古いようで、重宝されている場合も時々あるので、仕方がありません。でも、実に泥臭いことをやらせられますね。苦労もいいところです。

何故かVisual Studioのリソースエディタでは、ダイアログに張り付けたスクロールバー自身に、そのようなイベントがありません。

ちょっと調べたら、親のウインドウにWM_VSCROLLとWM_HSCROLLのイベントがあがるようです。

よって、それぞれのイベントハンドラーで対応の処理を書けばよいです。

さらに面倒なのは、スクロールバーの設定です。全体のサイズと位置ははSetWindowPosを使って設定します。

た とえば、画像表示のインターフェースで、表示している画像は全体の何割を占めているかを示すには、SCROLLINFO 構造体を使って、CScrollBar::SetScrollInfoを通して、設定できます。以下は横スクロールバーを設定するソースコードの例です。
void CMyView::OnInitialUpdate() 
{
   CView::OnInitialUpdate();

   // Set SCROLLINFO for the scroll bar. m_ScrollBar is of type 
   // CScrollBar class, and it is a member variable in CMyView class.
   SCROLLINFO info;
   info.cbSize = sizeof(SCROLLINFO);     
   info.fMask = SIF_ALL;     
   info.nMin = 0;     
   info.nMax = width_of_image; 
   info.nPage = width_of_display_area;     
   info.nPos = 0;    
   info.nTrackPos = 0; 
   m_ScrollBar.SetScrollInfo(&info);
}

No comments:

Post a Comment