CSliderCtrlのドラッグ中に値を確定しないようにする

投稿日:2014年8月8日 更新日:


スポンサーリンク

CEdit と CSpinButtonCtrl と CSliderCtrl の連動」の続き。
唐突にでてくるメンバ変数とかは、上記を参照してください。

CSliderCtrl のドラッグ中に値が更新され続けるとうっとおしいので、マウスアップ時に確定するようにする。
描画の都合とかで、リアルタイムに値が変わると困る場合に使えそう。

スライダーのドラッグ中には OnHScroll() が呼び出されるので,ここでの処理を変更します。
ドラッグ終了時に OnHScroll() の nSBCode に TB_ENDTRACK が渡されてくるので、この値を使用して処理を振り分けます。

メンバ変数 int m_value の値を、スライダー m_slider のドラッグ終了時に確定したい場合のサンプル。

void CChildView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
    if (pScrollBar == (CScrollBar*)&m_slider)
    {
        if (nSBCode == TB_ENDTRACK)
        {
            // ドラッグ終了時.
            int value = m_slider.GetPos();
            if (value != m_value)
            {
                m_value = value;
            }
            return;
        }
    }

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

スピンボタンやエディットボックスと連動させている場合には、 nSBCode が TB_ENDTRACK 以外の場合に、
スライダーから取得した値で SetPos() を行うようにすると,ドラッグ中の表示だけを連動できます。

おしまい。

スポンサーリンク

デスクトップ用_記事下_レクタングル

デスクトップ用_記事下_レクタングル

-MFC
-

Copyright© Pelican Philosophy , 2019 All Rights Reserved Powered by STINGER.