zoukankan      html  css  js  c++  java
  • VC中edit控件使用

    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("第一 第二 第三");

    将显示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,(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;
    }

    用Edit Box 显示系统实时时间:

    在对话框的初始化函数OnInitDialog()中添加以下程序:

    SYSTEMTIME st;
    GetLocalTime(&st);
    CString str_temp;
    str_temp.Format("%u/%u/%u %u:%u:%u:%u ", 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;
       }
    }

  • 相关阅读:
    科普下病菌和病毒
    centos环境下安装docker
    change master to到一个不存在的主库或主库无法连接
    java.lang.outofmemoryerror android
    委托 C#
    将PC端的网站转化成手机端网站需要增加以下这段代码即可,再布局一下界面即可
    combobox联动
    删除dataGridview中选中的一行或多行
    vs2010下如何使【“System.Data.OracleClient.OracleConnection”已过时】 解决办法
    MyEclipse连接SQL Server 2008数据库的操作方法
  • 原文地址:https://www.cnblogs.com/bayzhang/p/7381137.html
Copyright © 2011-2022 走看看