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)

{

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

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

clr   =   RGB(255,0,0);

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

m_bkBrush   =   ::CreateSolidBrush(clr);

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

}

4.利用向导为IDC_EDIT2生成一个数据成员CColorEdit   m_coloredit;

5.在定义CAboutDlg的color.cpp文件中加入:#include   "coloredit.h "

二、关于CEdit控件的透明

关于CEdit控件的透明 做一个透明的Edit控件的主要问题是字符的输出,在Edit里输出的刷新有几个时机,一个是在接收到键盘或鼠标消息的时候 ,还有就是在接收到WM_PAINT消息。刷新的时候也不是全部重画,所以想通过在继承的Edit类中处理WM_PAINT消息是行不通的。但是Edit 控件自己总是知道怎么去刷新,因此只要给控件发消息,让其自己来刷新就可以了。通过使用spy++的得知需要刷新有几个时机,一个是按键的时候,内容变 化,另一个是选择变化的时候,前者Edit控件会接收到GetCtlCode和KeyUp 消息,后者会接收到GetCtlCode和CaptureChange消息或KeyUp消息,因此在GetCtlCode里调用ReDrawWindow

来强迫Edit刷新 整个控件。在ReDrawWindow中通过使用参数RDW_ERASE可以使控件重画背景,即调用OnEraseBkgnd(CDC* pDC),在该函数中重 画背景。比较特殊的情况是按住鼠标左键并来回拖动鼠标的时候,这时候选择要改变,接收的消息是MouseMove,为了正 确响应也要处理该消息,但是在每一个MouseMove中都刷新显示的开销太大,而且不可避免地有闪烁感,因此只有在鼠标左 键按下的时候才刷新显示。

大概的代码如下,主要是继承了一个CEdit的对象CTpEdit,使用的时候可以动态创建,或者采用SubClass的方法。我用的是后者。

class CTESTDLG : public CDialog

{

......

//声明一个CTpEdit的成员变量

private:

CTpEdit m_tpedit;

};

//在OnInitDialog中Subclass对话框模板中的Edit控件

BOOL CTESTDLG::OnInitDialog()

{

CDialog::OnInitDialog();

m_tpedit.SubclassDlgItem(IDC_EDIT,this);

return TRUE;

}

//在OnCtlColor中设置背景的透明,要改变Edit控件字体的颜色也在这里

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

{

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

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

{

pDC->SetBkMode(TRANSPARENT); //设置背景透明,这样,输出字符的时候就

//是所谓的空心字,而不是有白的底色

pDC->SetTextColor(RGB(255,0,0)); //改变字体的颜色

return HBRUSH(GetStockObject(HOLLOW_BRUSH));

}

return hbr;

}

//CTpEdit对象

class CTpEdit : public CEdit

{

public:

//m_mousedown用来记录鼠标左键是否按下

BOOL m_mousedown;

protected:

//响应如下的消息

//{{AFX_MSG(CTpEdit)

afx_msg BOOL OnEraseBkgnd(CDC* pDC);

afx_msg void OnMouseMove(UINT nFlags, CPoint point);

afx_msg void OnLButtonDown(UINT nFlags, CPoint point);

afx_msg void OnLButtonUp(UINT nFlags, CPoint point);

afx_msg UINT OnGetDlgCode();

//}}AFX_MSG

DECLARE_MESSAGE_MAP()

};

//CTpEdit的消息响应函数如下

//画背景图

BOOL CTpEdit::OnEraseBkgnd(CDC* pDC)

{

//得到Edit控件的外框,即背景区域

RECT updatarect;

GetClientRect(&updatarect);

//画背景,我画的是一个黄色的矩形

CBrush newBrush;

newBrush.CreateSolidBrush(RGB(255,255,200));

CBrush * oldBrush = pDC->SelectObject(&newBrush);

pDC->Rectangle(&updatarect);

pDC->SelectObject(oldBrush);

return TRUE;

}

//强迫Edit控件擦除背景,重写字符

UINT CTpEdit::OnGetDlgCode()

{ RedrawWindow(NULL, NULL,RDW_INVALIDATE | RDW_ERASE );

return CEdit::OnGetDlgCode();

}

//记录鼠标左键是否按下

void CTpEdit::OnLButtonDown(UINT nFlags, CPoint point)

{

m_mousedown = TRUE;

SetCapture();

CEdit::OnLButtonDown(nFlags, point);

}

void CTpEdit::OnLButtonUp(UINT nFlags, CPoint point)

{

if(m_mousedown)

ReleaseCapture();

m_mousedown = FALSE;

CEdit::OnLButtonUp(nFlags, point);

}

//如果左键按下并且拖动鼠标就要刷新显示

void CTpEdit::OnMouseMove(UINT nFlags, CPoint point)

{

if(m_mousedown)

RedrawWindow(NULL, NULL,RDW_INVALIDATE | RDW_ERASE );

CEdit::OnMouseMove(nFlags, point);

}

//初始化成员变量

CTpEdit::CTpEdit()

{

m_mousedown=FALSE;

}

三、基本用法

通过类向导以生成两种类成员变量,一种是cstring类型,一种是cedit类型。

在程序中使用时如果只是简单的获取 edit控件内容,或设置简单的内容建议使用cstring类型成员变量。

示例:

CString m_strEdit;

//获得edit框内容

UpdateData(true);

此时m_strEdit就是edit框内容的字符串变量。

//要更新edit的话只要对m_strEdit进行赋值然后

UpdataData(false);//即可

如果是一些对edit框的复杂操作建议用cedit类型。

示例:

CEdit m_ctrlEdit;

//将光标移到开头

m_ctrlEdit.SetSel(0,0);

//将光标移到末尾

m_ctrlEdit.SetSel(-1);

//选中所有内容

m_ctrlEdit.SetSel(0,-1);

//写入值

m_ctrlEdit.ReplaceSel("替换内容");

//得到当前edit框中的所有字符数

int iStart,iCount;//iCount 为字符数

m_ctrlEdit.SetSel(0,-1);

m_ctrlEdit.GetSel(iStart,iCount);

还一种可以直接用控件的id值来进行操作

示例:

((CEdit*)GetDlgItem(IDC_EDIT)

他类似于上边的m_ctrlEdit

这样写的好处是可以在消息传递中使用,便于不同窗口间传递edit内容

例如:下面的消息响应函数中

SetEditContent(WPARAM wPARAM, LPARAM lPARAM)

IDC_EDIT可以通过wPARAM传递近来,而字符传内容可以直接通过lPARAM传递近来

CString Msg="要传递的消息";

::SendMessage(m_hParent,WM_SENDMSG_EDIT,(WPARAM) IDC_EDIT, (LPARAM)(LPSTR)(LPCTSTR)Msg)

如:

((CEdit*)GetDlgItem(wPARAM))->SetSel(-1);

((CEdit*)GetDlgItem(wPARAM))->ReplaceSel((LPCSTR)lPARAM);

VC编辑框(EDIT)的自动换行与自动滚屏

经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。

方法一:(当EDIT映射到一CString时)

m_String = m_String + sNewString + "/r/n" //自动换行

UpdateData(false);

此法只能做到自动换行,不会自动滚屏到最后一行。

方法二:(当EDIT映射到一EDIT时)

m_Edit.SetSel(-1, -1); //自动滚屏

m_Edit.ReplaceSel(sNewString+"/r/n"); //自动换行

UpdateData(true);

此法可以做到自动换行,并自动滚屏到最后一行。

以上,m_String、m_Edit.分别为给编辑框添加的成员变量;sNewString 为要显示的字符串

注意二法中UpdataData参数的区别。

四、参数

编辑框(Edit)控件实际上是一个简易的文本编辑器,用户可以在编辑框中输入可添加或插入文本。还有复制、粘贴、剪切、删除等编辑功能。

应用程序用CreateWindowEx创建编辑框控件时,可根据控件的用途在下表中选择部份常数来设定其风格属性(style)。

常数

说明

ES_MULTILINE

多行文本,指定编辑控件可以多行文本编辑,用户每按一次Enter,在当前光标次输入一个回车换行符(0Dh,0Ah),文本增加一行。

ES_LEFT

文本显示居左。

ES_CENTER

文本显示居中。

ES_RIGHT

文本显示居右。

ES_LOWERCASE

把用户输入的字母统统转换成小写字母。

ES_UPPERCASE

把用户输入的字母统统转换成大写字母。

ES_OEMCONVERT

使编辑框中的正文可以在ANSI字符集和OEM字符集之间相互转换。这在编辑框中包含文件名时是很有用的。

ES_AUTOHSCROLL

当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。

ES_AUTOVSCROLL

当用户在最后一个可见行按回车键时,正文向上滚动一页。

ES_NUMBER

只接收数码输入,其它字符输入一律无效。

ES_NOHIDESEL

当编辑框失去输入焦点,正文中的选择保持不变,缺省时正文中的选择将失效。

ES_READONLY

将编辑框设置成只读的。

ES_PASSWORD

使所有键入的字符都用“*”来显示。

ES_WANTRETURN

使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。

当用户在编辑控件上进行各种操作时,其父窗口将收到WM_COMMAND通知消息,同时wParam的低16位带控件的ID。lParam带控件句柄(hWnd),wParam的高16位带有如下表的消息代码。

消息代码

用户操作

EN_CHANGE

编辑框的内容被用户改变了。与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。

EN_ERRSPACE

编辑框控件无法申请足够的动态内存来满足需要。

EN_HSCROLL

用户在水平滚动条上单击鼠标。

EN_KILLFOCUS

编辑框失去输入焦点。

EN_MAXTEXT

输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。

EN_SETFOCUS

编辑框获得输入焦点。

EN_UPDATE

在编辑框准备显示改变了的正文时发送该消息。

EN_VSCROLL

用户在垂直滚动条上单击鼠标。

应用程序可以通过调用SendMessage向控件发送如下消息来设定和查询控件各种参数。

uMsg

wParam

lParam

说明

EM_UNDO

0

0

撤消前一次在控件的编辑操作,当重复发送本消息,控件将在撤消和恢复中来回切换。

EM_CANUNDO

0

0

检测控件撤消缓冲区是否为空,通常控件把最后一次在控件的编辑操作保存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可以撤消,否则返回FALSE,应用程序可以利用该返回值来禁止或允许菜单或工具条的“撤消”项。

EM_EMPTYUNDOBUFFER

0

0

清除控件的撤消缓冲区,使其不能撤消前一次编辑操作。

EM_REPLACESEL

TRUE或FALSE

替换文本指针

用指定文本替换编辑控件中的当前选定内容,如果wParam为TRUE,则本次操作允许撤消,FALSE禁止撤消。

EM_SETSEL

起点

终点

设置编辑控件中文本选定内容范围,该范围被高亮度显示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围。使用本 功能,键盘光标将被移至指定的终点后面,通常使用指定相同起点和终点来移动键盘光标而不选定范围。当指定的起点等于0和终点等于-1时,全文全部被选中, 此法常用在清空编辑控件。当指定的起点等于-2和终点等于-1时,全文均不选,键盘光标移至文本未端,此法常用在文本未端追加内容。注意 :当控件没有输入焦点时,本操作将会失败,一般在执行本操作前都应调用SetFocus先取得输入焦点。

EM_GETSEL

起点缓冲地址

或NULL

终点缓冲地址

或NULL

取得编辑控件中选定内容的范围,返回值中低16位为起点与高16位为终点,如果wParam和lParam中指定了地址,则会在该地址填入相应值(dword)。本操作也常用来求取键盘光标位置。

EM_CHARFROMPOS

0

位置

取得指定位置处的字符相对于文本头部的偏移,使用本操作应先在lParam的高16位指定行号,低16位指定列号,行列是按编辑控件的客户区左上角为原点(0,0)计算的。如果指定的位置超出控件客户区则返回-1

EM_FMTLINES

TRUE或FALSE

0

决定是否在取回的文本宇串中包含软回车字符

EM_GETFIRSTVISIBLELINE

0

0

取得编辑控件中显示的第一行

EM_GETHANDLE

0

0

取得编辑控件文本缓冲区。

EM_GETLIMITTEXT

0

0

获取一个编辑控件中文本的最大长度

EM_GETLINE

行号

缓冲地址

从编辑控件取回一行的内容,缓冲区第一个字(word)必须先填写缓冲区的长度,

EM_GETLINECOUNT

0

0

取得一个编辑控件的总行数

EM_GETMARGINS

0

0

获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距

EM_GETMODIFY

0

0

取编辑控件的修改标志,返回 TRUE则控件文本已被修改,返回FALSE则未变。此值可以来决定是否提示用户存盘。

EM_GETPASSWORDCHAR

0

0

取得编辑控件用来显示密码的字符,返回NULL表示没有字符。

EM_GETRECT

0

RECT结构地址

获取一个编辑控件的格式化矩形

EM_GETTHUMB

0

0

取得多行文本编辑控件的滚动框的当前位置。

EM_GETWORDBREAKPROC

0

0

取得整字换行回调函数EditWordBreakProc指针。

EM_LIMITTEXT

最大值

0

限制编辑中文本的最大长度

EM_LINEFROMCHAR

字符偏移

0

取得指定的字符偏移处的行号。

EM_LINEINDEX

行号

0

取得指定行第一个字符偏移

EM_LINELENGTH

字符偏移

0

取得指定字符偏移处对应的一行长度字符数。

EM_LINESCROLL

列字符

行数

滚动编辑控件

EM_POSFROMCHAR

POINT结构地址

字符偏移

取得指定字符偏移的显示位置行列号,行列是按编辑控件的客户区左上角为原点(0,0)计算的。字符偏移是相对于文本头部的偏移。

EM_SCROLL

SB_LINEDOWN

SB_LINEUP

SB_PAGEDOWN

SB_PAGEUP

0

编辑框显示文本垂直滚动。滚动方向:SB_LINEDOWN向下滚动一行,SB_LINEUP向上滚动一行,SB_PAGEDOWN向下滚动一页,SB_PAGEUP向上滚动一页。

EM_SCROLLCARET

0

0

把键盘光标移至可见范围。

EM_SETHANDLE

缓冲区指针

0

为编辑控件指定新的文本缓冲区。此操作仅适用对话框创建带DS_LOCALEDIT风格的控件。

EM_SETLIMITTEXT

长度(字节)

0

限制编辑控件中的文本缓冲区最大长度。

EM_SETMARGINS

EC_LEFTMARGIN

EC_RIGHTMARGIN

EC_USEFONTINFO

边距

设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在lParam的低16位指定左边距点数,当 wParam含EC_RIGHTMARGIN时在lParam的高16位指定右边距点数。当指定wParam为EC_USEFONTINFO时,则用当前 字体的字符"A"的宽度指定右边距和字符"C"的宽度指定左边距lParam被忽略。

EM_SETMODIFY

TRUE或FALSE

0

用于设置或清除一个编辑控件的修改标志

EM_SETPASSWORDCHAR

字符

0

指定控件用来显示密码字符,缺省为“*”。当wParam为0时,本操作将清除控件的ES_PASSWORD风格,并按实际字符显示。

EM_SETREADONLY

TRUE或FALSE

0

决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格

EM_SETRECT

0

RECT结构地址

为一个编辑控件设置格式化矩形

EM_SETRECTNP

0

RECT结构地址

与EM_SETRECT类似,只是控件此时不会重画

EM_SETTABSTOPS

制表站数

站距表地址

设置编辑控件中的制表站间距,当制表站数为0时lParam被忽略,所有制表站距均为32个对话框单位,当制表站数不为0时lParam指向一个由32位(dword)组成的站距表,以对话框单位为宽度计算单位。

EM_SETWORDBREAK

0

0

本操作现已不支持,请使用EM_SETWORDBREAKPROC。

EM_SETWORDBREAKPROC

0

函数入口地址

设置整字换行回调函数EditWordBreakProc指针。

五、 vc edit box 控件使用

SetSel(start,end)作用:

定制EDIT的所选择内容.间接地可以用于定位光标位置.

使用例子:

EXP1:设置光标

CEdit*      pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);

pEdit->SetSel(2,2);

pEdit->SetFocus();

EXP2:选择内容

CEdit*      pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);

pEdit->SetSel(0,2);//两个字符

说明:

如果出现光标设置失效的情况,可能是由于以下情况:因为UpdateData()的作用也会重置光标,所以用于设置光标时一定要放在UpdateData()之后.

如果用于选择内容:SetSel(0,-1)表示全选;SetSel(-1,i)表示删除所有.

1.怎么在CEDIT执行回车换行显示的功能?

CEdit控件设置want return 属性 并设置Multiline属性,此时用

CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1);

pEdit->SetWindowText("第一/r/n第二/r/n第三");

将显示3行。

2。作为密码输入控件使用。

m_WndEDIT4.SetPasswordChar('*');

3。CEDIT没有AppendText功能怎么办?

int nLength = m_WndEDIT4.SendMessage(WM_GETTEXTLENGTH);

m_WndEDIT4.SetSel(nLength, nLength);

m_WndEDIT4.ReplaceSel( " abc " );

1.如果文本框和变量建立了关联直接

UpdateData(TRUE) //用于获得文本框中的内容;

UpdateData(FALSE) //用于更新文本框的内容并和更新关联的变量

例如:

DDX_Text(pDX, IDC_EDIT1, m_sEdit1);//把变量m_sEdit1与IDC_EDIT1建立联系

//让文本框中显示“Hello”

m_sEdit1 = "Hello";

UpdateData(FALSE);

//获得文本框的用户输入内容

UpdateData(TRUE);//如果用户写入的是"MingFei",那么m_sEdit1的值应该是"MingFei"

if (m_sEdit1 == "MingFei")

{

AfxMessageBox("OK");

}

2.

CString str;

GetDlgItemText(IDC_EDIT1, str);//获得文本框中的内容,保存在str中

SetDlgItemText(IDC_EDIT1, str);//向文本框中写入str

3.麻烦点,其实就是第二种方法

CEdit *edit=(CEdit*)GetDlgItem(IDC_EDIT1);

CString dir;

edit->GetWindowText(dir);

(47) 如何限制编辑框中的准许字符

如果用户在编辑控件中只允许接收数字,可以使用一个标准的编辑控件并指定新的创建标志ES_NUMBERS,它是Windows 95新增加的标志,该标志限制 编辑控件只按收数字字符。如果用户需要复杂的编辑控件,可以使用Microsoft 的屏蔽编辑控件,它是一个很有用的OLE定制控件。

如果希望不使用OLE 定制控件自己处理字符,可以派生一个CEdit类并处理WM_CHAR消息,然后从编辑控件中过滤出特定的字符。首先,使用ClassWizard建立一 个 CEdit的派生类,其次,在对话类中指定一个成员变量将编辑控件分类在OnInitdialog 中调用CWnd: : SubclassDlgItem .

//In your dialog class declaration (.H file )

private : CMyEdit m_wndEdit // Instance of your new edit control .

//In you dialog class implementation (.CPP file )

BOOL CSampleDialog : : OnInitDialog ( )

{

//Subclass the edit lontrod .

m_wndEdit .SubclassDlgItem (IDC_EDIT,this)

}

使用ClassWizard处理WM_CHAR消息,计算nChar参量并决定所执行的操作,用户可以确定是否修改、传送字符。下例说明了如何显示字母字符,如果字符是字母字符,则调用CWnd OnChar,否则不调用OnChar.

//Only display alphabetic dharacters .

void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UITN nFlags )

{

//Determine if nChar is an alphabetic character.

if (: : IsCharAlpha ( ( TCHAR) nChar ) )

CEdit : : OnChar (nChar, nRepCnt , nFlags )

}

如果要修改字符,则不能仅仅简单地用修改过的nChar调用CEdit: : OnChar,然后CEdit: : OnChar调用CWnd: : Default获取原来的wParam 和lParam 的值,这样是不行的。要修改一个字符,需要首先修改nChar,然后用修改过的nChar调用CWnd: : DefWindowProc。下例说明了如何将字符转变为大写:

//Make all characters uppercase

void CMyEdit : : OnChar (UINT nChar , UINT nRepCnt , UINT nFlags )

{

该日志由 armrqsd 于7年前发表在综合分类下,最后更新于 2013年10月07日.

抱歉!评论已关闭.

Copyright © 2013-2018 学步园  保留所有权利.

软文销售 QQ客服:2517270004 f53107f0f26e11d3fb787d37176b2d04.png(其他合作也可洽谈)

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页

打赏作者

陶嘉恒

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值