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