第八节 对话框控件的变量绑定和开源控件的使用

第八节 对话框控件的变量绑定和开源控件的使用

在对话框上能添加各种控件,如何对这些控件进行操作呢,有2种基本的方法.

①->控件类型变量绑定的两种方法 - 数据交换机制:

(1)利用GetDlgItem函数取得对话框控件指针,具体操作

1->在主对话框类CMFCDlg类中 声明一个需要绑定的CButton类的变量 m_button, 在BOOL CMFCTestDlg::OnInitDialog()中,用pButton = (CButton *)GetDlgItem(IDC_BUTTON1);获取ID=IDC_BUTTON1的控件,

2->用获取的pButton指针进行操作,具体操作可以查看CButton类的成员函数

--------------------------------------------------------------------------------------------------------------------------------------

(2)利用VC向导的方式添加

1->在资源编辑器中画一个Edit Control,然后鼠标移上去右键添加变量CEdit m_Edit

2->观察主对话框 CMFCDlg类的cpp和h变化,会发现在h文件中添加了public:CEdit m_Edit;在cpp中有一个叫

void CMFCtDlg::DoDataExchange(CDataExchange* pDX)
{
 CDialog::DoDataExchange(pDX);
 DDX_Control(pDX, IDC_MAIN_EDIT, m_Edit);
}

这里的DDX_Control是进行数据交换的一个宏,作用控件与变量进行绑定,然后对变量进行操作就相当于对空间进行操作

3->对CEdit m_Edit进行操作 可以查看CEdit类的成员函数

--------------------------------------------------------------------------------------------------------------------------------------

②->字符串类型、数值类型 变量的绑定以及数据验证机制;

1->在资源编辑器的Edit control点击添加变量 选择非控件类型,添加CString m_strEdit,最大字符串长度限制选择5

2->操作完成后进入主对话框CMFCDlg类的cpp和h文件查看,如果在h文件没有发现CString m_strEdit则需要手动添加,在void CMFCtDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MAIN_EDIT, m_Edit);

DDX_Text(pDX,IDC_MAIN_EDIT,m_strEdit);  //如未出现则手动添加
}

DDX_Text是绑定非控件类型的控件变量宏

3->对m_strEdit进行MeesageBox(m_strEdit),发现提示框为空,这是因为还没有进行数据交换更新,需要调用

UpdateData(TRUE);//这句是指把Edit control数据提出来,而如果想把新的m_strEdit再次放入Edit control则用

UpdateData(FALSE);//这句是把m_strEdit 更新进去

4->退回第一步再次添加非控件变量 int m_intEdit,因为一个控件最多绑定2个变量

5->操作完成后进入主对话框CMFCDlg类的cpp和h文件查看,如果在h文件没有发现int m_strEdit则需要手动添加,在void CMFCtDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_MAIN_EDIT, m_Edit);

DDX_Text(pDX,IDC_MAIN_EDIT,m_intEdit); //如未出现则手动添加
}

6->对m_intEdit进行MessageBox操作,

m_intEdit = 123;

UpdateData(TRUE);

CString str;

str.Format(_T("m_IntEdit = %d"), m_IntEdit); //转格式为CString
MessageBox(str);
m_IntEdit = 456;
UpdateData(FALSE);

7->如果要对DDX_Text输入的数据进行限定

需要在void CMFCtDlg::DoDataExchange(CDataExchange* pDX)
假如DDV_XXXX 进行数据校验 注意需要数据更新后才能正常校验 UpdateData(TRUE);

--------------------------------------------------------------------------------------------------------------------------------------

③各种开源控件类的使用;

1->可以先下载开源控件类,然后在工程加入cpp和h文件,并按照说明进行操作

④MFC与SDK API中同名函数问题。

1->如果要在MFC类中使用全局变量需要加::操作符

--------------------------------------------------------------------------------------------------------------------------------------

⑤控件自定义消息响应

1->为控件添加基于子类的类,并且与控件所在类进行绑定,绑定步骤与上面一样

2->在新建类完成消息响应

3->有向导则无需手动添加消息映射,消息声明

你可能感兴趣的:(第八节 对话框控件的变量绑定和开源控件的使用)