些細なことで申し訳ありませんが、数値を編集コントロールに入力する方法がわかりません。CEditクラスで表される MFC エディット コントロール。
ありがとうございました。
前述の GetWindowText メソッドに加えて、DDX を介して整数/符号なし整数/倍精度浮動小数点値にバインドすることもできます。これを試して:
void CYourAwesomeDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_NUMBER, m_iNumber);
}
一方、m_iNumber は CYourAwesomeDialog クラスのメンバーです。
電話する必要があります
UpdateData(TRUE);
コントロールから変数に値を書き込むため。電話
UpdateData(FALSE);
逆に、コントロールの変数から行います。
編集(ボーナス):
回答を読み直したところ、UpdateData(...) には BOOL 変数が必要であることに気付きました - 修正しました。そこで、読みやすさが好きな人向けのアイデアがありました。どの呼び出しがどの方向に行われたか常に混乱していたので、次のように列挙型を導入して読みやすくすることができます (おそらく stdafx.h またはいくつかの中央ヘッダーで):
enum UpdateDataDirection
{
FromVariablesToControls = FALSE,
FromControlsToVariables = TRUE
}
そして、あなたはただ書く必要があります:
UpdateData(FromVariablesToControls);
また
UpdateData(FromControlsToVariables);
CEdit は CWnd から派生しているためGetWindowText
、CEdit 内のテキストを取得するために呼び出すことができるメンバー関数があり、それを数値型に変換するか、ユーザーが何を入力すると予想されるかによって、次のようになりますint
。double
CString text;
editControl.GetWindowText(text);
//here text should contain the numeric value
//all you need to do is to convert it into int/double/whatever
複数のダイアログなどでその機能が定期的に必要になる場合は、取得、設定、および検証作業を行うために、独自の CEdit 派生クラスをサブクラス化することもできます。
class CFloatEdit : public CEdit
{
public:
CFloatEdit();
void SetValue(double v) {
// format v into a string and pass to SetWindowText
}
double GetValue() {
// validate and then return atoi of GetWindowText
}
void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) {
// only allow digits, period and backspace
}
};
そのようなもので、メッセージ マップが他のすべてのメッセージを親 CEdit に渡すことを確認します。カスタマイズ可能な下限と上限、および小数点以下の桁数を設定できるように拡張できます。