Как получить значение текстового поля в MFC, когда текстовое поле содержит значение с плавающей запятой - PullRequest
3 голосов
/ 12 марта 2019

Я делаю программу в MFC, и у меня возникла проблема.У меня есть текстовое поле, созданное с помощью панелей инструментов в Visual Studio.

Мой идентификатор текстового поля - IDC_TEXT1, и мне нужно получить значение из текстового поля (float значение не string).Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Я просто хотел показать вам второй способ отображения элемента управления для редактирования на значение float.Это с помощью ClassWizard .

  • Щелкните правой кнопкой мыши элемент управления и выберите Добавить переменную ... :

Add Variable

  • Установите переменную категорию как значение , доступ в частный , укажите имя и, наконец, установите тип переменной в float.

Set as float

  • Нажмите Далее (если требуется) и установите числовой диапазон для ввода.

Numeric range

  • Нажмите Готово

Посмотрите на DoDataExchange метод.Это будет выглядеть примерно так:

void CMFCApplication2Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, m_fValue);
    DDV_MinMaxFloat(pDX, m_fValue, 1, 100);
}

Всякий раз, когда вам нужно работать с текущим значением элемента управления для редактирования, вы набираете UpdataData(TRUE); Это синхронизирует переменную с содержимым редактирование управления .Пример с точкой останова в режиме отладки:

Results

0 голосов
/ 12 марта 2019

Вы можете получить значение, вызвав GetDlgItemText и std::stod, как в этом примере:

class CAboutDlg : public CDialogEx
{
    CString m_txt;
    double m_num;
public:
    CAboutDlg() noexcept;

// Dialog Data
#ifdef AFX_DESIGN_TIME
    enum { IDD = IDD_ABOUTBOX };
#endif

protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

// Implementation
protected:
    DECLARE_MESSAGE_MAP()
public:
    afx_msg void OnBnClickedOk();
};

CAboutDlg::CAboutDlg() noexcept : CDialogEx(IDD_ABOUTBOX)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
    ON_BN_CLICKED(IDOK, &CAboutDlg::OnBnClickedOk)
END_MESSAGE_MAP()

// App command to run the dialog
void CSO55114372App::OnAppAbout()
{
    CAboutDlg aboutDlg;
    aboutDlg.DoModal();
}

// CSO55114372App customization load/save methods

void CSO55114372App::PreLoadState()
{
    BOOL bNameValid;
    CString strName;
    bNameValid = strName.LoadString(IDS_EDIT_MENU);
    ASSERT(bNameValid);
    GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EDIT);
    bNameValid = strName.LoadString(IDS_EXPLORER);
    ASSERT(bNameValid);
    GetContextMenuManager()->AddMenu(strName, IDR_POPUP_EXPLORER);
}

void CSO55114372App::LoadCustomState()
{
}

void CSO55114372App::SaveCustomState()
{
}

// CSO55114372App message handlers

void CAboutDlg::OnBnClickedOk()
{
    GetDlgItemText(IDC_EDIT2, m_txt);
    std::wstring s((LPCTSTR)m_txt);
    m_num = std::stod(s);
    CDialogEx::OnOK();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...