【发布时间】:2019-03-12 04:48:36
【问题描述】:
我正在 MFC 中编写程序,但遇到了一个问题。我有一个使用 Visual Studio 中的工具栏创建的文本框。
我的文本框ID是IDC_TEXT1,我需要从文本框中获取值(float值不是string强>)。我该怎么做?
【问题讨论】:
标签: c++ visual-studio mfc
我正在 MFC 中编写程序,但遇到了一个问题。我有一个使用 Visual Studio 中的工具栏创建的文本框。
我的文本框ID是IDC_TEXT1,我需要从文本框中获取值(float值不是string强>)。我该怎么做?
【问题讨论】:
标签: c++ visual-studio mfc
您可以通过调用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();
}
【讨论】:
我只是想向您展示将编辑控件映射到float 值的第二种方式。这是通过使用ClassWizard。
float。
查看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); 这会将变量与编辑控件的内容同步。调试模式下的断点示例:
【讨论】:
m_txt1.SetString(0)并添加了UpdateData(FALSE)但它不起作用