VC中Edit Control控制項的用法

來源:互聯網
上載者:User

1.設定edit唯讀屬性

      方法一:m_edit1.SetReadOnly(TRUE);
      方法二:::SendMessage(m_edit1.m_hWnd, EM_SETREADONLY, TRUE, 0);

2.判斷edit中游標狀態並得到選中內容(richedit同樣適用)

              int nStart, nEnd;
              CString strTemp;

              m_edit1.GetSel(nStart, nEnd);
              if(nStart == nEnd)
              {
                      strTemp.Format(_T(" 游標在%d" ), nStart);
                      AfxMessageBox(strTemp);
              }
              else
              {
                      //得到edit選中的內容       
                      m_edit1.GetWindowText(strTemp);
                      strTemp = strTemp.Mid(nStart) - strTemp.Mid(nEnd);
                      AfxMessageBox(strTemp);
              }
      註:GetSel後,如果nStart和nEnd,表明游標處於某個位置(直觀來看就是游標在閃動);
                        如果nStart和nEnd不相等,表明使用者在edit中選中了一段內容。

3.在edit最後添加字串

              CString str;
              m_edit1.SetSel(-1, -1);
              m_edit1.ReplaceSel(str);

4.隨輸入自動滾動到最後一行(richedit同樣適用)

      方法一:(摘自msdn)
              // The pointer to my edit.
              extern CEdit* pmyEdit;
              int nFirstVisible = pmyEdit-> GetFirstVisibleLine();

              // Scroll the edit control so that the first visible line
              // is the first line of text.
              if (nFirstVisible > 0)
              {
                      pmyEdit-> LineScroll(-nFirstVisible, 0);
              }
      方法二:m_richedit.PostMessage(WM_VSCROLL, SB_BOTTOM, 0);

5.如何限制edit輸入指定字元

    可以從CEdit派生一個類,添加WM_CHAR訊息映射。下面一個例子實現了限定輸入16進位字元的功能。

    void CMyHexEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
    {
              if ( (nChar > = 0 && nChar < = 9) ||
                        (nChar > = a & & nChar < = f) ||
                        (nChar > = A && nChar < = F) ||
                          nChar == VK_BACK ||
                          nChar == VK_DELETE)      //msdn的virtual key
            {
                      CEdit::OnChar(nChar, nRepCnt, nFlags);
              }       
    }

6.如何使用richedit

      添加AfxInitRichEdit();
            CxxxApp::InitInstance()
              {
                        AfxInitRichEdit();
                  .............
            }

    AfxInitRichEdit()功能:裝載 RichEdit 1.0 Control (RICHED32.DLL).

7.如何使用richedit2.0 or richedit3.0

      使用原因:由於RichEdit2.0A自動為寬字元(WideChar),所以它可以解決中文亂碼以及一些漢字問題

      方法一:(msdn上的做法,適用於用VC.NET及以後版本建立的工程)
                      To update rich edit controls in existing Visual C++ applications to version 2.0,
                      open the .RC file as text, change the class name of each rich edit control from    " RICHEDIT" to " RichEdit20a" .
                      Then replace the call to AfxInitRichEdit with AfxInitRichEdit2.
      方法二:以對話方塊為例:
            (1)      增加一全域變數 HMODULE hMod;
            (2)      在CxxxApp::InitInstance()中添加一句hMod = LoadLibrary(_T(" riched20.dll" ));
                          在CxxxApp::ExitInstance()中添加一句FreeLibrary(hMod);
            (3)          在對話方塊上放一個richedit,文本方式開啟.rc檔案修改該richedit控制項的類名" RICHEDIT" to " RichEdit20a" .
            (4)          在對話方塊標頭檔添加 CRichEditCtrl m_richedit;
                          在OnInitDialog中添加 m_richedit.SubclassDlgItem(IDC_RICHEDIT1, this);

8.改變richedit指定地區的顏色及字型

              CHARFORMAT cf;
              ZeroMemory(&cf, sizeof(CHARFORMAT));
              cf.cbSize = sizeof(CHARFORMAT);
              cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
                                                      CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
              cf.dwEffects = 0;
              cf.yHeight = 12*12; //文字高度
              cf.crTextColor = RGB(200, 100, 255); //文字顏色
              strcpy(cf.szFaceName ,_T(" 隸書" )); //設定字型
       
              m_richedit1.SetSel(1, 5); //設定處理地區
              m_richedit1.SetSelectionCharFormat(cf);

9.設定行間距(只適用於richedit2.0)

              PARAFORMAT2 pf;
              pf2.cbSize = sizeof(PARAFORMAT2);
              pf2.dwMask = PFM_LINESPACING | PFM_SPACEAFTER;
              pf2.dyLineSpacing = 200;
              pf2.bLineSpacingRule = 4;
              m_richedit.SetParaFormat(pf2);

10.richedit插入位元影像

Q220844:How to insert a bitmap into an RTF document using the RichEdit control in Visual C++ 6.0
http://support.microsoft.com/default.aspx?scid=kb; en-us; 220844
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2417/
http://www.codeguru.com/Cpp/controls/richedit/article.php/c5383/

11.richedit插入gif動畫

http://www.codeproject.com/richedit/AnimatedEmoticon.asp

12.richedit嵌入ole對象

http://support.microsoft.com/kb/141549/en-us

13.使richedit選中內容唯讀

http://www.codeguru.com/cpp/controls/richedit/article.php/c2401/

14.列印richedit

http://www.protext.com/MFC/RichEdit3.htm

15.richeidt用於聊天訊息視窗

http://www.vckbase.com/document/viewdoc/?id=1087
http://www.codeproject.com/richedit/chatrichedit.asp
http://www.codeguru.com/Cpp/controls/richedit/article.php/c2395/

16.解決richedit的EN_SETFOCUS和EN_KILLFOCUS無響應的問題

http://support.microsoft.com/kb/181664/en-us

17.richedit拼字檢查

http://www.codeproject.com/com/AutoSpellCheck.asp

18.改變edit背景色

Q117778:How to change the background color of an MFC edit control
http://support.microsoft.com/kb/117778/en-us

19.當edit控制項的父視窗屬性是帶標題列WS_CAPTION和子視窗WS_CHILD時,不能設定焦點SetFocus

Q230587:PRB: Cant Set Focus to an Edit Control When its Parent Is an Inactive Captioned Child Window
http://support.microsoft.com/kb/230587/en-us

20. 在Edit中斷行符號時,會退出對話方塊

選中Edit的風格Want Return。

MSDN的解釋如下:
ES_WANTRETURN    Specifies that a carriage return be inserted when the user presses the ENTER key while entering text into a multiple-line edit control in a dialog box. Without this style, pressing the ENTER key has the same effect as pressing the dialog boxs default pushbutton. This style has no effect on a single-line edit control.

21. 動態建立的edit沒有邊框的問題

      m_edit.Create(....);
      m_edit.ModifyStyleEx(0, WS_EX_CLIENTEDGE, SWP_DRAWFRAME);

22. 一個能顯示RTF,ole(包括gif, wmv,excel ,ppt)的例子

http://www.codeproject.com/richedit/COleRichEditCtrl.asp

本文來自CSDN部落格,轉載請標明出處:http://blog.csdn.net/zeng622peng/archive/2010/04/26/5531597.aspx

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.