您的位置:首页 > 其它

vc MFC edit box 控件使用

2011-10-14 23:01 351 查看
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 

::EnumFontFamiliesEx((HDC) dc,&lf, (FONTENUMPROC) EnumFontFamProc,(LP
c05b
ARAM) 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博客,转载请标明出处:http://blog.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;

   }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息