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

你可能感兴趣的:(delete,mfc,insert,dialog,scroll,rtf)