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("第一\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,(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\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;
   }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM