MFC edit control 用法(总结)
MFC里面的EDIT Control控件的用法是怎么样的,1。怎么样才气赋值给EDIT Control控件并在EDIT Control控件展现出来;2。怎么获得EDIT Control控件的值并传递给一个变量?期看列位大侠帮帮手!//获得EDITCEdit* pBoxOne;pBoxOne = (CEdit*) GetDlgItem(IDC_EDIT1);//付值pBoxOne-SetWindowText( _T"FOO" );//取值CString str;pBoxOne-GetWindowText(str);GetDlgItem(IDC_EDIT1)-SetWindowText( _T"FOO" );也能够//取值CString str;GetDlgItem(IDC_EDIT1)-GetWindowText(str);
EditControl是在MFC对话框中最频繁的利用的控件之一
VC++2005供给EditControl的属性和控件事务操做简双方便
1只容许输进数字假设设置EditControl中只能输进数字,在VC6。
0中需要编写一个派生类来到达目标,而在VC++2005下只需要在属性对话框中将Number的属性值设
为True就能够了。
2获取EditControl的内容两种办法第一种,操纵MFC利用法式领导生成一个基于对话框的利用法式,从资本视图中抉择该Dialog窗体,操纵右侧的东西箱,向Dialog内添加一个
EditControl项,声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content。
CString m_sEdit_Content;CString s;UpdateData(true);s=m_sEdit_Content。GetString();MessageBox(s,_T("获取编纂框的内容"),MB_OK);s。ReleaseBuffer();
如许就获得了编纂框的内容
UpdateData(true);那句代码很重要,它的感化是将输进的数据拆进EditControl对应的变量m_sEdit_Content中。
因为MFC利用法式领导默认是利用Unicode库,所以MessageBox中的字符串需要用_T(),不然会呈现const char[]转换LPCTSTR错误,假设不利用
Unicode库就不需要_T()。
第二种办法声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content。
代码如下(Unicode)CString s;s。GetBufferSetLength(1024);m_Edit_Content。GetWindowTextW(s。GetBuffer(),s。GetLength());MessageBox(s,_T("获取文本框的内容"),MB_OK);s。
ReleaseBuffer();
假设不是Unicode下获取编纂框内容的函数就是GetWindowTextA
3将EditControl中的内容转化为整数
在限造编纂框只能数字之后,要将字符串转化为整数声明控件变量的类别为Value,变量类型为CString,变量名为m_sEdit_Content。
CString s;UpdateData(true);s=m_sEdit_Content。GetString();int n=_tstoi(s);s。ReleaseBuffer();n就是所需要的整数在VC2005下字符串转换成整数需要_tstoi那个函数
4限造编纂框的输进长度声明控件变量的类别为Control,变量类型为CEdit,变量名为m_Edit_Content。
在对话框初始化的处所写m_Edit_Content。SetLimitText(1);编纂框就只能输进一个字符了。
最初:要说的是GetDlgItemText不要随便用……晓得就行,假设实用,你能够尝尝……
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 )
//Make sure character is uppercase 。
if (: : IsCharAlpha ( 。( TCHAR) nChar)
nChar=: : CharUpper(nChar )
//Bypass default OnChar processing and directly call
//default window proc。
DefWindProc (WM_CHAR, nChar , MAKELPARAM (nRepCnt, nFlags ))
列举所有字体
LOGFONT lf;
lf。lfCharSet = DEFAULT_CHARSET; // Initialize the LOGFONT structure
strcpy(lf。
lfFaceName,"");
CClientDC dc (this);
// Enumerate the font families
::EnumFontFamilie***((HDC) dc,lf, (FONTENUMPROC) EnumFontFamProc,(LPARAM) this,0);
//列举函数
int CALLBACK EnumFontFamProc(LPENUMLOGFONT lpelf,
LPNEWTEXTMETRIC lpntm,DWORD nFontType,long lparam)
// Create a pointer to the dialog window
CDay7Dlg* pWnd = (CDay7Dlg*) lparam;
// add the font name to the list box
pWnd -m_ctlFontList。
AddString(lpelf -elfLogFont。lfFaceName);
// Return 1 to continue font enumeration
return 1;
本文来自CSDN博客,转载请标明出处:。
csdn。net/cciey/archive/2008/07/24/2702356。aspx
用Edit Box 展现系统实不时间:
在对话框的初始化函数OnInitDialog()中添加以下法式:
SYSTEMTIME st;
GetLocalTime(st);
CString str_temp;
str_temp。
Format("%u/%u/%u %u:%u:%u:%u\n", st。wYear, st。wMonth, st。wDay, st。wHour, st。wMinute, st。wSecond, st。wMilliseconds);
CEdit* edt = (CEdit*)GetDlgItem(IDC_EDIT_TIME);
edt-SetWindowText(str_temp);
用Edit Box 展现系统当前时间:
在对话框的初始化函数OnInitDialog()中添加以下法式:
CString str;
CTime tm;
tm = CTime::GetCurrentTime(); //把获得的当前时间保留到变量tm中
str = tm。
Format("%Y年%m月%d日 %X");
this-GetDlgItem(IDC_EDIT1)-SetWindowText(str);
用Edit Box 只承受数字输进:
在对话框初始化函数中添加以下代码:
CEdit* m_edit = (CEdit*)GetDlgItem(IDC_EDIT1);
long wl = GetWindowLong(m_edit-m_hWnd, GWL_STYLE); //获得Edit Box的窗口风气
SetWindowLong(m_edit-m_hWnd, GWL_STYLE, wl | ES_NUMBER); //设置Edit Box新风气
自定义Edit Box的可输进内容:
重载对话框的PreTranslateMessage函数,而且添加以下代码:
BOOL CLangziDlg::PreTranslateMessage(MSG* pMsg)
CEdit* m_edit = (CEdit*)GetDlgItem(IDC_EDIT1);
if((pMsg-hwnd == m_edit-m_hwnd) (pMsg-message == WM_CHAR))
if(65 != pMsg-wParam) //只容许输进字母A(A的ascll码是65)
return TRUE;