「CEditを継承したクラスを作成する」の版間の差分

ナビゲーションに移動 検索に移動
編集の要約なし
編集の要約なし
165行目: 165行目:
     // 他の型用の DDV も標準であります
     // 他の型用の DDV も標準であります
     DDV_MinMaxDouble(pDX, atof(m_strValue), 0.0, 1.0);
     DDV_MinMaxDouble(pDX, atof(m_strValue), 0.0, 1.0);
}
</source>
<br><br>
== 複数のエディットコントロール間で有効性を確認する ==
2つのエディットコントロール間の関係性から、データの有効性を決めたいことがある。<br>
例えば、ユーザに上限値と下限値を入力してもらう場合、上限値は下限値より大きくなければいけない。<br>
そこで、データが有効か確認するための独自関数を作成する。<br>
<br>
<source lang="c++">
void DDV_CheckLowerUpper(CDataExchange* pDX, double lower, double upper)
{
    if(lower > upper)
    {
      AfxMessageBox(_T("下限値には上限値より小さい数値を入力してください."), MB_ICONWARNING);
      pDX->Fail();
    }
}
</source>
上記の関数を、DoDataExchange()内に追記する。<br>
<source lang="c++">
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
    // 入力値の制限,OnChar をオーバーライドしたクラス
    DDX_Control(pDX, IDC_EDIT_LOWER_VALUE, m_editLower);
    DDX_Control(pDX, IDC_EDIT_UPPER_VALUE, m_editUpper);
    // ダイアログ消滅後の値取得用
    DDX_Text(pDX, IDC_EDIT_LOWER_VALUE, m_strLower);
    DDX_Text(pDX, IDC_EDIT_UPPER_VALUE, m_strUpper);
    // 入力値の範囲確認
    // 他の型用のDDVも標準で存在する
    DDV_MinMaxDouble(pDX, atof(m_strLower), 0.0, 1.0);
    DDV_MinMaxDouble(pDX, atof(m_strUpper), 0.0, 1.0);
    // 下限値と上限値が入力されている場合は 下限値 < 上限値 であるかチェックする
    if(!m_strLower.IsEmpty() && !m_strUpper.IsEmpty())
    {
      DDV_CheckLowerUpper(pDX, atof(m_strLower), atof(m_strUpper));
    }
  }
  }
  </source>
  </source>
匿名利用者

案内メニュー