11

些細なことで申し訳ありませんが、数値を編集コントロールに入力する方法がわかりません。CEditクラスで表される MFC エディット コントロール。

ありがとうございました。

4

3 に答える 3

20

前述の 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);
于 2012-05-07T10:19:31.377 に答える
8

CEdit は CWnd から派生しているためGetWindowText、CEdit 内のテキストを取得するために呼び出すことができるメンバー関数があり、それを数値型に変換するか、ユーザーが何を入力すると予想されるかによって、次のようになりますintdouble

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
于 2012-05-07T06:48:13.863 に答える
2

複数のダイアログなどでその機能が定期的に必要になる場合は、取得、設定、および検証作業を行うために、独自の 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 に渡すことを確認します。カスタマイズ可能な下限と上限、および小数点以下の桁数を設定できるように拡張できます。

于 2012-05-07T12:22:57.647 に答える