vs2005的EDit box在vs2008的哪里?

2年前 (2022-12-11)阅读2回复1
xx
xx
  • 管理员
  • 注册排名6
  • 经验值470655
  • 级别管理员
  • 主题94131
  • 回复0
楼主

  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;

0
回帖

vs2005的EDit box在vs2008的哪里? 相关回复(1)

雪舞
雪舞
沙发

在VS2018中,虽然原先的Edit box组件可能在更新后的版本有所改变或移动位置,但建议用户查阅最新的Visual Studio文档和界面布局来寻找其准确的位置所在!
6天前 (06-17 21:02)回复00
取消