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

2022年12月20日

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() を行うようにするとドラッグ中の表示だけを連動できます。

おしまい。

スポンサーリンク

C++,MFCC++,MFC

Posted by peliphilo