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

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

1、静态文本框

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

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

  1. ID :所有静态文本框的缺省 ID 都是 IDC_STATIC ,因为其最后为STATIC,所以需要重置,否则无法添加变量。 
  2. 标题:需要显示的文本信息是在这里设置的。 
  3. 边框:可以对属性对话框中的Sunken,Static Edge属性进行设置。

添加变量后,将会在对话框类的DoDataExchange()函数内实现变量和控件的关联。

常用成员函数有:

//设置静态文本内容
setWindowTextW(TEXT("测试"));

//获取文本内容
CString  tmp;
GetWindowTextW(tmp);

静态文本框也可以显示图片,必须为位图(*.bmp):

//设置静态控件窗口风格为位图居中显示,第一个参数为非零值即可
m_label.ModifyStyle(0xf, SS_BITMAP | SS_CENTERIMAGE);

//通过路径获取bitmap句柄
#define HBMP(filepath,width,height) (HBITMAP)LoadImage(AfxGetInstanceHandle(),filepath,IMAGE_BITMAP,width,height,LR_LOADFROMFILE|LR_CREATEDIBSECTION)

//宽高应该按照控件的大小设置
CRect rect;
m_label.GetWindowRect(rect);

//静态控件设置bitmap
m_label.SetBitmap(HBMP(TEXT("./1.bmp"), rect.Width, rect.Height));

2、命令按钮

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

常用成员函数:

//设置静态文本内容
setWindowTextW(TEXT("测试"));

//获取文本内容
CString  tmp;
GetWindowTextW(tmp);

//设置按钮是否使能
EnableWindow(FALSE);

另外CDialog::OnOK()及CDialog::OnCancel()均能退出当前对话框。

在对话框的OnInitDialog函数最后添加如下代码,可以实现位图按钮的功能:

// 获取位图资源句柄
HBITMAP hBitmap = LoadBitmap(AfxGetInstanceHandle(),
 MAKEINTRESOURCE(IDB_BITMAP1));
//按钮添加位图资源
m_btn.SetBitmap(hBitmap);
//将按钮设置成与位图同样大小
	m_btn.MoveWindow(10, 10, 66, 77);
另外还需注意,在按钮上显示位图,需要将按钮的Bitmap属性设置为TRUE

 3、编辑框

编辑框(Edit Control)的属性主要在 Styles 选项卡中设置。重要属性有: 

  1. Multiline :定义该编辑框为多行文本框。 
  2. Number :限定输入的字符只能是数字字符。 
  3. Border :为控件创建边界。 
  4. Read-only :编辑框成为只读的,禁止用户编辑
  5. Password:是否为密码框
  6. Want return:是否接收回车键,为false的话,按回车键将会退出程序
  7. 【Vertical scroll】和【Auto Vscroll】 属性设置为True,编辑框将出现垂直滚动条。 
  8. Auto VScroll(在多行控件中,当用户在最后一行按下ENTER键时自动向上滚动文本),设置为True

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

成员函数

功能

应用实例

SetSel(n, m)

选定编辑框中从第n个字符到底m个字符的内容。SetSel(0, -1)的作用是选定所有的内容。

m_e.SetSel(0, -1)

Copy()

将编辑框中当前选定的内容复制到剪贴板

m_e.Copy()

Cut()

将编辑框中当前选定的内容剪切到剪贴板

m_e.Cut()

Clear()

删除编辑框中当前选定的内容

m_e.Clear()

Paste()

把剪贴板中的内容粘贴到编辑框中光标所在的位置

m_e.Paste()

GetLine(n, ch)

将多行编辑框中的第n行的内容复制到ch中。ch为一般的字符数组。

TCHAR ch[80];

m_e.GetLine(0, ch);

ReplaceSel(ch)

将ch中的内容替换编辑框中选定的内容

TCHAR ch[80] = “abcd”;

m_e.ReplaceSel(ch);

Undo()

撤销编辑框的最后一次操作

m_e.Undo();

此外 编辑框还可以使用 CWnd 类的成员函数。 CWnd 类的重要成员函数有:

//将编辑框 m_e 中的内容复制到 CString 类对象 ch 中。
CString ch; 
m_e.GetWindowTextW (ch); 

将编辑框 m_e 中的内容最多复制80个字符到字符数组 ch 中。
TCHAR ch[80]; 
m_e.GetWindowTextW (ch, 80);


//设置编辑框中的内容为“ abcdefg ” 
TCHAR ch[20] = "abcdefg"; 
m_e.SetWindowText(ch);

编辑框在连接变量时,除了要指定变量名之外,还要确定变量类别。变量类别有两个可选择:

  1. Control,意味着该变量作控件使用,对应的变量类型只能是CEdit,可以使用该控件类的成员函数;
  2. Value,意味着该变量当作C/C++中普通的变量使用,对应的变量类型有CString、int、double等,可以使用这些数据类型的函数,但是不能使用控件的成员函数。

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

  1. 若编辑框的内容改变了,则应使用语句UpdateData(TRUE) 获取对话框数据
  2. 若变量的值改变了,则应使用语句UpdateData(FALSE) 初始化对话框控件。

知识点补充:

在MFC对话框应用程序中,启动应用程序,默认状态下当我们按下键盘的回车键之后,程序就自动关闭了.如果不想让程序关闭,那么应该怎么办?如果按下ESC键之后想让程序关闭,那么又该怎么办?

当在对话框中按下回车键时,会选择对话框中默认的按钮消息响应函数来处理这一事件,而基类(CDialogEx)的IDOK按钮的默认响应函数(OnOk)的功能就是关闭对话框。因此,我们一但在对话框测试程序中按下回车键,这个对话框就关闭了。

为了屏蔽掉默认的回车键关闭对话框这一功能,应该在对话框子类中重写OK按钮的消息响应函数OnOk。

void CMy04_DlgEditDlg::OnOK()
{		
	    //去掉此行, 子类中不能调用基类的OnOK函数
	    //CDialogEx::OnOK();
}

或者重写该类的虚函数PreTranslateMessage()也可以实现:

BOOL CMy04_DlgEditDlg::PreTranslateMessage(MSG* pMsg)
{
	if (pMsg->message == WM_KEYDOWN)
	{	
                //屏蔽Enter键,使之立即返回TURE
                if (pMsg->wParam == VK_RETURN)
		{
			return TRUE;
		}

                //屏蔽ESC键,使之立即退出
		if (pMsg->wParam == VK_ESCAPE)
		{
			PostQuitMessage(0);
			return TRUE;
		}
	}
	return CDialogEx::PreTranslateMessage(pMsg);
}

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chiang木

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值