编辑框

控件访问方式 两数相加,得到两个编辑框的文本,给第三个编辑框

第一步.编辑资源
1.拉出3个静态文本框命名为:number1;number2;number3
2.拉出3个编辑框ID号分别为:IDC_EDIT1,IDC_EDIT2,IDC_EDIT3
3.右键点击CTestDlg给IDC_EDIT1,IDC_EDIT2,IDC_EDIT3,分别生成三个成员变量m_num1,m_num2,m_num3

第二步.编写代码
使用函数:GetDlgItem、GetWindowsText、SetWindowsText
使用函数:GetDlgItemText、SetDlgItemText
使用函数:GetDlgItemInt、SetDlgItemInt
变量相关联:将控件和整形变量相关联
变量相关联:将控件和控件变量相关联
使用函数:SendMessage()
使用函数:SendDlgItemMessage()

第一种方式.使用函数GetWindowText、SetWindowText
void CTestDlg::OnBtnAdd1()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItem(IDC_EDIT1)->GetWindowText(ch1, 10);
GetDlgItem(IDC_EDIT2)->GetWindowText(ch2, 10);
num1=atoi(ch1); //数值型变为字符型
num2=atoi(ch2);
num3=num1+num2;
itoa(num3, ch3, 10); //字符型变为数值型
GetDlgItem(IDC_EDIT3)->SetWindowText(ch3);
}

第二种方式.使用函数GetDlgItemText、SetDlgItemText
void CTestDlg::OnBtnAdd1()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
GetDlgItemText(IDC_EDIT1,ch1,10);
GetDlgItemText(IDC_EDIT2,ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3, ch3, 10);
SetDlgItemText(IDC_EDIT3,ch3);
}

第三种方式.使用函数GetDlgItemInt、SendDlgItemMessage
void CTestDlg::OnBtnAdd1()
{
int num1,num2,num3;
//后面还有两个参数,为缺省值,缺省为真,即数字可为负数
num1=GetDlgItemInt(IDC_EDIT1);
num2=GetDlgItemInt(IDC_EDIT2);
num3=num1+num2;
SetDlgItemInt(IDC_EDIT3,num3);//一个是ID号,另一个参数为要设置的数,
}

第四种方式.变量相关联:用成员变量
1).用类向导对editbox添加int变量,则该变量会在.h中定义 .cpp构造函数中初始化为0,
DoDataExchange()主要被框架类调用,用来交换和校验对话框中的数据,但并不是给我们直接调用的,必须用updatedata()函数间接调用,完成数据交换功能

2).对话框数据交换 DDX_Text()
在DoDataExchange()中通过函数DDX_Text()完成变量和控件之间的关联,DDX_有许多个函数 DDX_Radio,DDX_Scroll等等,可完成变量与不同的控件相关联

3).对话框数据校验 DDV_MinMaxInt()
数据校验的功能是怎么完成的呢?给我们的editbox添加int变量后设定取值范围0-100后,会在DoDataExchange()中添加几个函数 DDV_MinMaxInt(pDX,m_num1,0,100);

4).在程序代码让数据交互生效 UpdateData()
CWnd::UpdateData BOOL UpdateData(BOOL bSaveAndValidate = TRUE);
UpdateData参数为TRUE: 表示由控件哪里获取数据给对应的变量
UpdateData参数为FALSE:表示由对应的变量哪里输出数据给控件

void CTestDlg::OnBtnAdd1()
{
//右键点击CTestDlg给IDC_EDIT1,IDC_EDIT2,IDC_EDIT3
//分别生成三个成员变量m_num1,m_num2,m_num3,在构造函数中将基初始化为0
//亦可以在源对话框中生成,classwizard->Member variable-> add variable->
//变量名edit1,edit2,edit3, 控件为int型
UpdateData();
m_num3=m_num1+m_num2;
UpdateData(FALSE);
}

第五种方式.变量相关联:用控件变量,控件变量代表了控件本身
定义控件变量后,就可以对该变量直接用GetWindowText()SetWindowText()进行操作
void CTestDlg::OnBtnAdd1()
{
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
m_edit1.GetWindowText(ch1,10);
m_edit2.GetWindowText(ch2,10);
num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3, ch3, 10);
m_edit3.SetWindowText(ch3);
}

第六种方式.使用函数SendMessage:通过发送消息的方式来访问
1).通过发送一个消息来获取文本WM_GETTEXT
SendMessage((HWND) hWnd,WM_GETTEXT,(WPARAM) wParam,(LPARAM) lParam);
多少个字符 保存文本的buffer
2).拷贝一个窗口的文本到调用者的buffer当中
::SenMessage(GetDlgItem(IDE_EDIT1)->m_hWnd,WM_GETTEXT,10,(LPARAM)ch1); 或者
::SenMessage(m_edit1.m_hWnd,WM_GETTEXT,10,(LPARAM)ch1);

3).不用这个api函数,也可以用cwnd的成员函数发送这样的消息
GetDlgItem(IDE_EDIT1)->SenMessage(WM_GETTEXT,10,(LPARAM)ch1); //对象内自有维护的句柄

4).或者直接用成员对象发送消息
m_edit1.SenMessage(WM_GETTEXT,10,(LPARAM)ch1); //对象内自有维护的句柄,不用填了,方便

5).设置输出文本就可以用WM_SETTEXT消息完成,使用和WM_GETTEXT完全一样
m_edit3.SenMessage(WM_SETTEXT,0,(LPARAM)ch3); //这里wParam没有使用,必须为0

void CTestDlg::OnBtnAdd1()
{
//三个编辑框分别关联三个成员变量:点击编辑框,建立类向导->menber variable
//->Add variable->变量名edit1,edit2,edit3, 控件为Ctrol型
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];
//::SendMessage(GetDlgItem(IDC_EDIT1)->m_hwnd,WM_GETTEXT,10,LPARAM(ch1));//方法1
//::SendMessage(GetDlgItem(IDC_EDIT2)->m_hwnd,WM_GETTEXT,10,LPARAM(ch2));//方法1
//::SendMessage(m_edit1.m_hwnd,WM_GETTEXT,10,LPARAM(ch1));//方法1
//::SendMessage(m_edit2.m_hwnd,WM_GETTEXT,10,LPARAM(ch2));//方法1
//GetDlgItem(IDC_EDIT1)->SendMessage(WM_GETTEXT,10,LPARAM(ch1));//方法1
//GetDlgItem(IDC_EDIT2)->SendMessage(WM_GETTEXT,10,LPARAM(ch2));//方法1
//m_edit1.SendMessage(WM_GETTEXT,10,LPARAM(ch1));//方法1
m_edit1.SendMessage(WM_GETTEXT,10,LPARAM(ch1));//方法1
m_edit2.SendMessage(WM_GETTEXT,10,LPARAM(ch2));//方法1

num1=atoi(ch1);
num2=atoi(ch2);
num3=num1+num2;
itoa(num3, ch3, 10);

m_edit3.SendMessage(WM_SETTEXT,0,LPARAM(ch3));
//GetDlgItem(IDC_EDIT3)->SendMessage(WM_SETTEXT, 0, LPARAM(ch3));
}

第七种方式.使用函数SendDlgItemMessage:直接给对话框的子控件发送消息
void CTestDlg::OnBtnAdd1()
{
//三个编辑框分别关联三个成员变量:点击编辑框,建立类向导->menber variable
//->Add variable->变量名num1,num2,num3, 类型为int型
int num1,num2,num3;
char ch1[10],ch2[10],ch3[10];

SendDlgItemMessage(IDC_EDIT1,WM_GETTEXT,10,LPARAM(ch1));
SendDlgItemMessage(IDC_EDIT2,WM_GETTEXT,10,LPARAM(ch2));

num1=atoi(ch1); //数值型变为字符型
num2=atoi(ch2);
num3=num1+num2;
itoa(num3, ch3, 10);//字符型变为数值

SendDlgItemMessage(IDC_EDIT3,WM_SETTEXT,0,LPARAM(ch3));
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页