天天看點

VC中Edit Control控件的用法

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

出處:http://blog.csdn.net/zeng622peng/archive/2010/04/26/5531597.aspx