void CMfcSnakeDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_COMBO_speed, Box); DDX_Control(pDX, IDC_EDIT_score, EDIT_Score); }
时间: 2024-04-02 07:34:22 浏览: 17
这是一个 MFC 程序中的对话框类的成员函数,用于数据交换和控件绑定。其中,DDX_Control 宏用于将控件与成员变量关联起来,以便在程序中对控件进行操作。第一个参数是控件的 ID,第二个参数是成员变量名。在这个例子中,Box 和 EDIT_Score 是成员变量,分别对应 ID 为 IDC_COMBO_speed 和 IDC_EDIT_score 的控件。
相关问题
void InsertInfoDialog::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Text(pDX, IDC_ID, m_nID); DDX_Text(pDX, IDC_Name, m_strName); DDX_Text(pDX, IDC_Price, m_dPrice); DDX_Text(pDX, IDC_Count, m_nCount); } 为什么当我用DDX_Text绑定时,会出现弹窗,“请输入一个整数”。该怎么解决 其中m_nID,m_strName,是CString类型,m_dPrice是double类型,m_nCount是int类型 给出修改后的代码
这个弹窗是因为你在绑定一个整型的变量时,输入的字符无法转换为整型,所以会提示输入一个整数。有几种解决方法:
1. 将输入框的属性设置为数字类型,这样输入框只能输入数字,避免了输入非数字字符的情况。
2. 在绑定时,将第三个参数设为TRUE,表示使用强制转换,这样就会将输入框中的字符强制转换为要绑定的类型。例如:
DDX_Text(pDX, IDC_ID, m_nID, TRUE);
3. 自定义一个验证函数,用于判断输入的字符是否符合要求,如果不符合,则弹出自定义的错误提示框。例如:
void InsertInfoDialog::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Text(pDX, IDC_ID, m_nID);
DDX_Text(pDX, IDC_Name, m_strName);
DDX_Text(pDX, IDC_Price, m_dPrice);
DDX_Text(pDX, IDC_Count, m_nCount, ValidateCount);
}
void InsertInfoDialog::ValidateCount(CDataExchange* pDX, int nIDC, int& value)
{
CString strValue;
pDX->m_pDlgWnd->GetDlgItemText(nIDC, strValue);
if (!IsNumeric(strValue))
{
AfxMessageBox(_T("请输入一个整数!"));
pDX->Fail();
}
else
{
value = _ttoi(strValue);
}
}
bool InsertInfoDialog::IsNumeric(CString strValue)
{
int nLength = strValue.GetLength();
for (int i = 0; i < nLength; i++)
{
if (!_istdigit(strValue[i]))
{
return false;
}
}
return true;
}
这里的ValidateCount函数,就是用来验证输入的Count是否为整数的函数,如果不是,则弹出一个提示框。
解释// MyDlg.h : header file//#pragma once// CMyDlg dialogclass CMyDlg : public CDialogEx{// Constructionpublic: CMyDlg(CWnd* pParent = nullptr); // standard constructor// Dialog Data#ifdef AFX_DESIGN_TIME enum { IDD = IDD_DIALOG1 };#endifprotected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support// Implementationprotected: double m_a; double m_b; double m_c; afx_msg void OnCalculate(); afx_msg void OnExit(); DECLARE_MESSAGE_MAP()public: afx_msg void OnBnClickedButtonCalculate(); afx_msg void OnBnClickedButtonExit();};
这是一个 MFC 对话框类的头文件 MyDlg.h,其中声明了一个名为 CMyDlg 的类,继承自 CDialogEx。该类包含了一些成员变量和成员函数,其中成员变量包括 m_a、m_b 和 m_c,成员函数包括 OnCalculate() 和 OnExit()。同时,该类还声明了两个消息映射函数 OnBnClickedButtonCalculate() 和 OnBnClickedButtonExit(),用于响应按钮的点击事件。