edit控件自动换行 mfc_MFC控件Edit Control | 学步园

入门篇:

Edit Control控件最常见的用法,一般有有以下几种:

1、  显示默认的字符串;

2、  接受用户输入的字符串。

3、  作为密码框接受用户输入的字符串。

Edit Control对应的MFC类为CEdit类。而CEdit是继承自CWnd类的,所以也继承了来自CWnd类的GetWindowText()和SetWindowText()。其实从这两个函数的名字大家都可以看出来是做什么用的了。

我们来一步一步实现Edit Control控件的这三种最常见的用法。

首先,先建立一个项目,在VC++中选择MFC,选择MFC应用程序,并选择基于对话框的。项目完全打开后,我们可以看到默认生成的对话框,我们从工具箱拉一个Edit Control到对话框上。使用Ctrl+左键双击,创建一个和Edit Control控件的一个变量,也即一个CEdit类的对象。此处为m_edit.

接下来我们可以在对话框的CXXXDlg::OnInitDialog()中添加代码。此处XXX是项目名称。在此函数中添加:

m_edit.SetWindowText(_T("welcome to edit"));

然后我们调试程序,就可以看到对话框上面放置的Edit Control中显示了上述字符串的内容。其实这个函数很简单,只是一个需要设置的字符串。我们来看下关于这个函数的具体内容:

CWnd::SetWindowText

void SetWindowText( LPCTSTR lpszString );

参数:

lpszString

指向一个CString对象或以null结尾的字符串,将被用作新的标题或控件文本。

说明:这个函数将窗口的标题设为指定的文本。如果窗口为一个控件,则将设置控件内的文本。这个函数使一条WM_SETTEXT消息被发送到这个窗口。

而我们要得到Edit Control控件中输入的内容的话,我们需要一个触发。此处我们以点击确定键为触发。双击资源中的对话框上的确定键,我们可以直接到达函数CXXXtDlg::OnBnClickedOk()的位置,然后我们可以在这个函数中添加如下代码:

CString lpszStringBuf;

m_edit.GetWindowText(lpszStringBuf);

MessageBox(lpszStringBuf);

这几句代码可以接受控件的文本内容,然后以一个消息的形式显示出来。

我们也来具体分析下GetWindowText:

CWnd::GetWindowText

int GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;

void GetWindowText( CString& rString ) const;

返回值:指定了要拷贝的字符串的长度,以字节为单位,不包括结尾的空字符。如果CWnd没有标题或标题为空,则为0。

参数:

lpszStringBuf

指向要接收窗口标题的复制字符串的缓冲区。

nMaxCount

指定了要拷贝的缓冲区的最大字符数目。如果字符串比nMaxCount指定的数目还要长,则被截断。

rString

用于接收窗口标题的复制字符串的CString对象。

说明:这个函数将CWnd的标题(如果有)拷贝到lpszStringBuf指向的缓冲区或者目的字符串rString。如果CWnd对象是一个控件,则GetWindowText成员函数将拷贝控件内的文本(而不是控件的标题)。这个成员函数会向CWnd对象发送一个WM_GETTEXT消息。

其实这两个功能的实现都很简单,只是使用了一个函数就可以实现了。如果要是想做一个密码输入框怎么办呢?其实跟上面的比起来,只需要在Edit Control控件的属性中将Password的属性改为TRUE就可以了。

提高篇:

一、利用WM_CTLCOLOR消息实现Edit   Control的文本与背景色的改变

首先要明白:WM_CTLCOLOR是一个由控制(Control)发送给它父窗口的通知消息(Notification   message)。

实现步骤:

生成一个标准的单文档应用程序框架,假设应用程序的名称为Color。我将利用它的About对话框做示范。在About   dialog中添加两个Edit   control,设定其ID为IDC_EDIT1与IDC_EDIT2。

第一种方法(对应于IDC_EDIT1):   按照标准的Windows编程,由其父窗口的消息处理函数负责处理WM_CTLCOLOR消息。

1.   在CAboutDlg中添加一个数据成员:HBRUSH   m_brMine;

2.   利用向导映射AboutDlg的WM_CTLCOLOR消息,产生函数:HBRUSH   CAboutDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor);

pDC是AboutDlg的设备上下文,pWnd是AboutDlg中发送该消息的control指针,nCtlColor市Control的类型编码。对其进行如下修改:

HBRUSH   CAboutDlg::OnCtlColor(CDC*   pDC,   CWnd*   pWnd,   UINT   nCtlColor)

{

if   ((pWnd-> GetDlgCtrlID()   ==   IDC_EDIT1)   &&   (nCtlColor   ==   CTLCOLOR_EDIT))

{

COLORREF   clr   =   RGB(255,0,0);

pDC-> SetTextColor(clr);       //设置红色的文本

clr   =   RGB(0,0,0);

pDC-> SetBkColor(clr);           //设置黑色的背景

m_brMine   =   ::CreateSolidBrush(clr);

return   m_brMine;     //作为约定,返回背景色对应的刷子句柄

}

else

{

HBRUSH   hbr   =   CDialog::OnCtlColor(pDC,   pWnd,   nCtlColor);

return   hbr;

}

}

第二种方法(对应于IDC_EDIT2):

利用MFC   4.0的新特性:   Message   reflection。

1.利用向导添加一个新的类:CColorEdit,基类为CEdit;

2.在CColorEdit中添加一个数据成员:   HBRUSH   m_bkBrush;

3.利用向导映射CColorEdit的 "=WM_CTLCOLOR "消息,产生函数:

HBRUSH   CColorEdit::CtlColor(CDC*   pDC,   UINT   nCtlColor);

对其进行如下修改:

HBRUSH   CColorEdit::CtlColor(CDC*   pDC,   UINT   nCtlColor)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

陶嘉恒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值