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