|
スライダコントロールの基本1
今回はスライダコントロールの使い方を解説していきます。スライダコントロールは、つまみをドラッグして操作するコントロールです。水平方向と垂直方向のどちらで作ることもできます。
今回もダイアログベースでプロジェクトを作成します。サンプルとして次のようなダイアログを作ります。水平方向のスライダ2つと、垂直方向のスライダ1つを追加します。各スライダにはそれぞれ値の表示用のエディットボックスも追加します。

スライダのプロパティですが、IDを設定したら後は基本的にデフォルトでOKです。垂直方向にする場合は「Orientation」を「垂直方向」にします。

スライダコントロールの操作は、CSliderCtrlクラスの関数を使って行うので、Control型のDDX変数を追加すると楽になります。
クラスビューからダイアログクラスを右クリックし、「追加」→「変数の追加」を選択します。

「アクセス」はprivate、「変数の種類」にCSliderCtrlを入力します。メンバ変数となるのでm_で始まる変数名にするとよいでしょう。

また、スライダの値はvalue型のDDX変数を使うと簡単に操作できます。同様にvalue型の変数も追加しましょう。さらに、値表示用のエディットボックスにもvalue型のDDX変数を追加します。
さて、今回はスライダが3つあります。同じ処理を1つ1つのコントロールについて書いていくのは非効率なので、DDX変数は配列にしてしまいましょう。(この方法についての詳しい説明は「DDX変数を配列にする」を見てください。)
ダイアログクラスのメンバに、次のようにDDX変数を記述します。
private:
CSliderCtrl m_xcSlider[3]; // スライダ(Control)
int m_xvSlider[3]; // スライダ(Value)
CString m_xvEdit[3]; // エディットボックス(Value)
|
DoDataExchange()関数は次のようになります。
void CSliderDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Slider(pDX, IDC_SLIDER1, m_xvSlider[0]);
DDX_Slider(pDX, IDC_SLIDER2, m_xvSlider[1]);
DDX_Slider(pDX, IDC_SLIDER3, m_xvSlider[2]);
DDX_Control(pDX, IDC_SLIDER1, m_xcSlider[0]);
DDX_Control(pDX, IDC_SLIDER2, m_xcSlider[1]);
DDX_Control(pDX, IDC_SLIDER3, m_xcSlider[2]);
DDX_Text(pDX, IDC_EDIT_SV1, m_xvEdit[0]);
DDX_Text(pDX, IDC_EDIT_SV2, m_xvEdit[1]);
DDX_Text(pDX, IDC_EDIT_SV3, m_xvEdit[2]);
}
|
では、コードのほうを実装していきましょう。まずは、初期化処理です。OnInitDialog()で次のように処理します。
BOOL CSliderDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // 大きいアイコンの設定
SetIcon(m_hIcon, FALSE); // 小さいアイコンの設定
// TODO: 初期化をここに追加します。
m_xcSlider[0].SetRange(0, 100);
m_xvSlider[0] = 65;
m_xvEdit[0].Format(_T("%d"), m_xvSlider[0]);
m_xcSlider[1].SetRange(-1000, 1000);
m_xvSlider[1] = 10;
m_xvEdit[1].Format(_T("%d"), m_xvSlider[1]);
m_xcSlider[2].SetRange(0, 1000);
m_xvSlider[2] = 100;
m_xvEdit[2].Format(_T("%d"), m_xvSlider[2]);
UpdateData(FALSE);
return TRUE;
}
|
まずは、スライダの値の最小値、最大値を設定します。これには、CSliderCtrl::SetRange()関数を使います。
| void CSliderCtrl::SetRange(int nMin, int nMax, BOOL bRedraw = FALSE); |
| 説明: |
スライダの値の最小値、最大値を設定 |
| 引数: |
nMin:最小値
nMax:最大値
bRedraw:再描画する場合TRUE |
| 戻り値: |
なし |
次は現在の値をセットし、UpdateData(FALSE)関数で表示を更新します。値の設定はCSliderCtrl::SetPos()関数を使ってもできますが、今回はDDX変数を使っているので、この関数は使いません。
ということで今回はここで一区切りにします。次回はスライダの操作部分を実装していきます。
|