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

📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「</source>」を「</syntaxhighlight>」に置換
 
(同じ利用者による、間の1版が非表示)
2行目: 2行目:
CEditを継承したクラスを作成し、OnChar関数をオーバーライドする。
CEditを継承したクラスを作成し、OnChar関数をオーバーライドする。


  <source lang="c++">
  <syntaxhighlight lang="c++">
  CNumericEdit.h
  CNumericEdit.h
   
   
33行目: 33行目:
     DECLARE_MESSAGE_MAP()
     DECLARE_MESSAGE_MAP()
  };
  };
  </source>
  </syntaxhighlight>
<br>
<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  #include "stdafx.h"
  #include "stdafx.h"
  #include "CNumericEdit.h"
  #include "CNumericEdit.h"
112行目: 112行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


119行目: 119行目:
DoModal()関数がIDOKを返した時点で、ダイアログ内のコントロールが破棄されてしまうため、値を取得する事ができない。<br>
DoModal()関数がIDOKを返した時点で、ダイアログ内のコントロールが破棄されてしまうため、値を取得する事ができない。<br>
この場合、メンバにCString型の変数を定義し、DDX_Textで値を更新する。<br>
この場合、メンバにCString型の変数を定義し、DDX_Textで値を更新する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  CMyDialog dlg;
  CMyDialog dlg;
   
   
128行目: 128行目:
     dlg.m_editValue.GetWindowText(strText); // アサーションエラー
     dlg.m_editValue.GetWindowText(strText); // アサーションエラー
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


== 入力値の制限と値取得を同時に行う ==
== 入力値の制限と値取得を同時に行う ==
CEdit型とCString型の変数を定義し、DoDataExchange内に、DDXControlとDDXTEXTを追加する。
CEdit型とCString型の変数を定義し、DoDataExchange内に、DDXControlとDDXTEXTを追加する。
  <source lang="c++">
  <syntaxhighlight lang="c++">
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  {
  {
144行目: 144行目:
     DDX_Text(pDX, IDC_EDIT_VALUE, m_strValue);
     DDX_Text(pDX, IDC_EDIT_VALUE, m_strValue);
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


150行目: 150行目:
ダイアログデータバリデーション(DDV)を使用する。<br>
ダイアログデータバリデーション(DDV)を使用する。<br>
DoDataExchange()内に下記のように関数を追加する。<br>
DoDataExchange()内に下記のように関数を追加する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  {
  {
165行目: 165行目:
     DDV_MinMaxDouble(pDX, atof(m_strValue), 0.0, 1.0);
     DDV_MinMaxDouble(pDX, atof(m_strValue), 0.0, 1.0);
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


173行目: 173行目:
そこで、データが有効か確認するための独自関数を作成する。<br>
そこで、データが有効か確認するための独自関数を作成する。<br>
<br>
<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  void DDV_CheckLowerUpper(CDataExchange* pDX, double lower, double upper)
  void DDV_CheckLowerUpper(CDataExchange* pDX, double lower, double upper)
  {
  {
182行目: 182行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
上記の関数を、DoDataExchange()内に追記する。<br>
上記の関数を、DoDataExchange()内に追記する。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  void CMyDialog::DoDataExchange(CDataExchange* pDX)
  {
  {
208行目: 208行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:MFC]]
[[カテゴリ:MFC]]