MFC编程基础 1 基于对话框的Windows应用程序(2)

2019-06-11 12:05

1.3 静态文本框、命令按钮和编辑框

静态文本框、命令按钮和编辑框是Windows应用程序中最基本的控件。静态文本框是CStatic类的对象,命令按钮是CButton类的对象,编辑框是CEdit类的对象。这三个类都是从CWnd类直接派生来的,具有CWnd类的全部功能。

1.3.1 静态文本框

静态文本框是最简单的控件。它主要用来显示文本信息,不能接受用户输入,一般不需要连接变量,也不需要处理消息。

静态文本框的重要属性有:

(1) ID :所有静态文本框的缺省 ID 都是 IDC_STATIC ,一般不需要重新设置。 (2)标题:需要显示的文本信息是在这里设置的。

(3)边框:边框属性在 Styles 选项卡中,决定是否带有边框。

1.3.2 命令按钮

命令按钮是最常见的、应用最广泛的一种控件。在程序执行期间,当单击某个命令按钮后就会执行相应的消息处理函数。

命令按钮的主要属性是标题属性,该属性用来设置在命令按钮上显示的文本。 命令按钮一般不需要连接变量。

命令按钮能处理的消息是 BN_CLICKED 。

6

1.3.3 编辑框

1. 属性设置

编辑框的属性主要在 Styles 选项卡中设置。重要属性有: (1) Multiline :定义该编辑框为多行文本框。 (2) Number :限定输入的字符只能是数字字符。 (3) Border :为控件创建边界。

(4) Read-only :编辑框成为只读的,禁止用户编辑。

2. 成员函数

编辑框常用的成员函数见表。

此外 编辑框还可以使用 CWnd 类的成员函数。 CWnd 类的重要成员函数有: (1)获取编辑中的内容

形式 1 : void GetWindowText( CString& rString ) const; 说明 :将编辑框中的内容复制到 CString 类对象 rString 中。 示例:将编辑框 m_e 中的内容复制到 CString 类对象 ch 中。 CString ch;

m_e.GetWindowText(ch);

形式 2 : int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

说明 :将编辑框中的内容复制到 lpszStringBuf 中,最多复制 nMaxCount 个字符。 lpszStringBuf 是字符数组或字符指针。

示例:将编辑框 m_e 中的内容复制到字符数组 ch 中。 char ch[80];

m_e.GetWindowText(ch,80); (2)设置编辑框中的内容

7

形式: void SetWindowText( LPCTSTR lpszString );

说明 :将 lpszString 中的内容替换编辑框中原有内容, lpszString 是字符数组或字符指针 。

示例:设置编辑框中的内容为“ abcdefg ” char ch[20]=\ m_e.SetWindowText(ch);

3. 连接变量

编辑框在连接变量时,除了要指定变量名之外,还要确定变量类别。变量类别有两个可选择:一是Control,意味着该变量作控件使用,对应的变量类型只能是Cedit,可以使用该控件类的成员函数;二是Value,意味着该变量当作C/C++中普通的变量使用,对应的变量类型有CString、int、double等,可以使用这些数据类型的函数,但是不能使用控件的成员函数。

若一个编辑框连接了一个Value类别的变量,则该变量就表示这个编辑框,编辑框中显示的内容就是变量的值。但是,改变了编辑框的内容并不会自动更新对应的变量的值,同样,改变了变量的值也不会自动刷新编辑框的内容。若要保持一致,需要使用UpdateData()函数更新,如图所示。若编辑框的内容改变了,则应使用语句UpdateData(TRUE);更新对应的变量的值;若变量的值改变了,则应使用语句UpdateData(FALSE);刷新编辑框的内容。

4. 消息处理函数

在编辑框能处理的消息中是最重要的是 EN_CHANGE ,这是编辑框中的文本被修改后发出的消息。

【例1.2】 输入一元二次方程 ax2 +bx+c=0 的系数 a 、 b 、 c ,计算并输出两个根 x1 、 x2 ,如图所示。

8

求方程的根

对话框上有5个静态文本框、5个编辑框和2个命令按钮。编辑框按表连接变量,其余控件不需要连接变量。

为了要计算 b2 -4ac 的平方根,需要使用 sqrt() 函数,因此在 TESTDlg.cpp 文件的开始添加了文件包含命令:

#include \ // \计算\按钮的函数 这条要放在最后 ?????????????????????? void CTESTDlg::OnCalc() {

// TODO: Add your control notification handler code here UpdateData(TRUE);

double a=m_a; double b=m_b; double c=m_c;

m_x1=(-b+sqrt(b*b-4*a*c))/(2*a); m_x2=(-b-sqrt(b*b-4*a*c))/(2*a); UpdateData(FALSE);

}

// “结束”按钮的函数

?????????????????????? void CTESTDlg::OnOk() {

// TODO: Add your control notification handler code here CDialog::OnOK(); //OnOK(); }

?????????????????????? 【例1.3】字符串转换程序

9

转换规则为: 大写字母转换成小写;

将小写字母转换成大写; 其余字符转换为“*” 换行符和回车符不变;

要求:每输入一个字符立即转换

第1个编辑框连接变量m_e1 (Control ) 属性 选定: Multiline

Vertical scroll

Auto VScroll(在多行控件中,当用户在最后一行按下ENTER键时自动向上滚动文本) Want return(使多行编辑器接收回车键,表示换行。如果不指定,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭)

第2个编辑框连接变量m_e2 (Control ) 属性 选定:Multiline Vertical scroll Auto VScroll Read-only

对第1个编辑框添加EN_CHANGE 消息处理函数

void CTESTDlg::OnChangeEdit1() {

// TODO: Add your control notification handler code here char s[80];

m_e1.GetWindowText(s,80); for(int i=0;s[i]!='\\0';i++)

if (s[i]>='A' && s[i]<='Z') else

10

s[i]=s[i]+'a'-'A';


MFC编程基础 1 基于对话框的Windows应用程序(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《电气控制与可编程控制器》教案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: