mfc点击文本框框弹出界面,并得到文本框对应的变量
时间: 2024-03-22 10:37:24 浏览: 44
可以通过以下步骤实现:
1. 给文本框添加控件变量,方法是在ClassWizard中选择该对话框类,然后在"Member Variables"页面中添加一个变量,类型为CEdit,变量名自定义。
2. 在OnInitDialog函数中,使用SubclassDlgItem函数将文本框控件与一个自定义的CMyEdit类关联起来。
3. 在CMyEdit类中重载PreTranslateMessage函数,捕获WM_LBUTTONDOWN消息,当鼠标左键按下时,弹出对话框。
4. 在对话框中添加一个编辑框控件,并添加控件变量。
5. 在对话框类中添加一个成员变量,用于保存文本框对应的控件变量指针。
6. 在对话框的OnInitDialog函数中,将成员变量指向文本框对应的控件变量。
7. 在对话框中的确定按钮的OnClick事件中,获取编辑框中输入的内容,并将其赋值给文本框对应的控件变量。
以下是示例代码:
```cpp
// MyEdit.h
class CMyEdit : public CEdit
{
public:
CMyEdit();
protected:
afx_msg void PreTranslateMessage(MSG* pMsg);
DECLARE_MESSAGE_MAP()
};
// MyEdit.cpp
CMyEdit::CMyEdit()
{
}
void CMyEdit::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_LBUTTONDOWN)
{
CDialog dlg(IDD_MY_DIALOG, this);
dlg.m_pEdit = this; // 将编辑框对应的控件变量指针保存到对话框成员变量中
dlg.DoModal();
return;
}
CEdit::PreTranslateMessage(pMsg);
}
BEGIN_MESSAGE_MAP(CMyEdit, CEdit)
END_MESSAGE_MAP()
// MyDialog.h
class CMyDialog : public CDialog
{
public:
CMyDialog(CWnd* pParent = NULL);
CEdit* m_pEdit; // 文本框对应的控件变量指针
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
private:
CString m_strText;
};
// MyDialog.cpp
CMyDialog::CMyDialog(CWnd* pParent /*=NULL*/)
: CDialog(IDD_MY_DIALOG, pParent)
{
}
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, m_strText);
}
BEGIN_MESSAGE_MAP(CMyDialog, CDialog)
ON_BN_CLICKED(IDOK, &CMyDialog::OnBnClickedOk)
END_MESSAGE_MAP()
void CMyDialog::OnBnClickedOk()
{
UpdateData(TRUE); // 获取编辑框中输入的内容
m_pEdit->SetWindowText(m_strText); // 将内容赋值给文本框对应的控件变量
CDialog::OnOK();
}
// MyDialog.rc
IDD_MY_DIALOG DIALOGEX 0, 0, 200, 100
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Shell Dlg", 400, 0, 0x0
BEGIN
EDITTEXT IDC_EDIT1,7,7,185,14,ES_AUTOHSCROLL
PUSHBUTTON "确定",IDOK,7,28,50,14
PUSHBUTTON "取消",IDCANCEL,62,28,50,14
END
// MyDlg.cpp
void CMyDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MY_EDIT, m_edit); // 将控件变量与文本框控件关联
}
// MyDlg.h
class CMyDlg : public CDialogEx
{
public:
CMyDlg(CWnd* pParent = nullptr);
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_MY_DIALOG };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
private:
CMyEdit m_edit;
};
```
请注意,为了简化示例代码,我假设了文本框控件的ID为IDC_MY_EDIT,对话框的ID为IDD_MY_DIALOG,编辑框控件的ID为IDC_EDIT1。您需要根据您的实际情况进行修改。