cbSize = sizeof CHARFORMAT ; cf.. szFaceName ,"Times New Roman";.
Trang 1S D NG RICHEDIT CONTROL
V n Chí Nam – Nguy n c Hoàng H
Khoa Công ngh Thông tin, Tr ng H KHTN TP.HCM (vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn)
Phiên b n c p nh t ngày 16/05/2005
RichEdit control là gì ?
RichEdit control là m t lo i control chu n c a Windows, dùng cho vi c nh p
li u hay hi n th các đo n v n b n lên dialog RichEdit control khá gi ng v i Edit control
i m đ c bi t c a RichEdit control so v i Edit control là : RichEdit control cho phép thi t l p t ng đ nh d ng riêng bi t trên đ n v t ng ký t trong control (t c là đ i
v i m i ký t trong RichEdit control, chúng ta có th thi t l p các đ nh d ng màu, c
ch , ki u ch … ) trong khi đ i v i Edit control chúng ta ch có th có m t thi t l p duy nh t đ i v i toàn control (không th thi t l p đ nh d ng cho t ng ký t riêng l )
L u ý khi s d ng RichEdit control
Khi s d ng RichEdit control trong m t ch ng trình nào đó, có m t hàm quan
tr ng n u chúng ta quên s d ng hay đ t hàm đó sai v trí thì s d n đ n vi c ch ng trình không th th c thi đ c Do đó :
NH DÙNG HÀM AfxInitRichEdit() KHI S D NG RICHEDIT
CONTROL VÀ T NÓ TRONG HÀM InitInstance() TRONG C App()
Ví d :
BOOL CRECDemoApp:: InitInstance ()
{
AfxInitRichEdit();//Quan tr ng
CRECDemoDlg dlg ;
m_pMainWnd = & dlg ;
int nResponse = dlg DoModal ();
if ( nResponse == IDOK )
{
}
else if ( nResponse == IDCANCEL )
{
// TODO: Place code here to handle when the dialog is // dismissed with Cancel
}
return FALSE ;
}
Trang 2M t s l u ý khác
o Hi n th đ c nhi u dòng trong RichEdit control, check
Styles\Multiline
o Hi n th scroll, check vào Styles\Horizontal scroll,…
o S d ng đ c phím Enter trong RichEdit control, check vào
Styles\Want return
o Không b gi t màn hình khi đ nh d ng l ng l n ký t trong RichEdit
control, dùng hai hàm : LockWindowUpdate và
UnlockWindowUpdate
void CRECDemoDlg:: OnDinhdang ()
{
// TODO: Add your control notification handler code here CRichEditCtrl* pRE ;
int i ; pRE = (CRichEditCtrl*) GetDlgItem ( IDC_RICHEDIT1 );
LockWindowUpdate();
… for ( i =0; i < tam GetLength (); i ++) {
… }
UnlockWindowUpdate();
}
M T S C U TRÚC, HÀM TH NG G P
C u trúc CHARFORMAT
typedef struct _charformat {
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
Trang 3BYTE bCharSet;
BYTE bPitchAndFamily;
TCHAR szFaceName[LF_FACESIZE];
} CHARFORMAT;
i v i c u trúc CHARFORMAT này, tham kh o thêm trong MSDN ph n CHARFORMAT đây, chúng tôi ch đ c p m t s v n đ có liên quan xung quanh
c u trúc này:
o C u trúc này dùng cho đ nh d ng các ký t trong RichEdit control sau khi đã đ c ch n
o Thành ph n cbSize luôn đ c s d ng và nh đ t :
CHARFORMAT cf ;
cf cbSize = sizeof( CHARFORMAT );
o Thành ph n dwMask cho bi t nh ng thu c tính (đ nh d ng) nào có s
thay đ i:
VD :
cf dwMask = CFM_ITALIC | CFM_COLOR | CFM_BOLD ;
Cho bi t 3 thu c tính v đ nghiên (Italic), màu s c (Color), thu c tính đ m (Bold) s có s thay đ i
o i li n v i thành ph n dwMask là thành ph n dwEffects Thành ph n
này dùng đ gán (ho c lo i b ) thu c tính đ nh d ng đã đ c đ a ra
trong thành ph n dwMask Các thu c tính có nh h ng t dwEffects là
Bold, Italic, Underlined, hay StrikeOut…N u mu n gán m t thu c tính nào thêm ta dùng toán t | và lo i b thu c tính nào ta dùng toán t & và toán t ~
Ví d :
thi t l p các thu c tính : ch in nghiêng, không đ m, và có màu xanh lá cây (Green), font ch là Times New Roman ta gán các thành ph n c a c u trúc CHARFORMAT nh sau :
CHARFORMAT cf ;
cf cbSize = sizeof( CHARFORMAT );
cf dwMask = CFM_ITALIC | CFM_COLOR | CFM_BOLD | CFM_FACE ;
cf dwEffects = CFE_ITALIC ;
cf dwEffects &= CFE_BOLD ;
cf dwEffects &= ~ CFE_AUTOCOLOR ;
cf crTextColor = RGB (0,255,0);
strcpy ( cf szFaceName ,"Times New Roman");
Trang 4HÀM SetSel VÀ HÀM SetSelectionCharFormat
thi t l p đ nh d ng cho m t đo n v n b n ta th c hi n các b c sau :
o Ch n đo n v n b n đó (dùng hàm SetSel) L u ý, n u mu n ch n toàn
b n i dung c a control thì dùng SetSel(0,-1)
o Thi t l p các thu c tính c n thay đ i c a đo n v n b n thông qua c u trúc CHARFORMAT
Thay đ i đ nh d ng cho đo n v n b n thông hàm SetSelectionCharFormat
VÍ D MINH HO
Thi t k dialog nh hình d i đây
Cho phép
o Ng i s d ng nh p nh ng dòng v n b n vào h p RichEditCtrl
o Khi ng i s d ng b m nút Dinh Dang, các ký t trong h p Rich Edit
Ctrl đ c đ nh d ng theo m t tiêu chu n nào đó Ch ng h n : các ký t
t A đ n Z : màu xanh, các ký s (0-9) : màu đ , các ký t đ c bi t khác : màu đen…
Vi t hàm đ nh d ng
void CRECDemoDlg :: OnDinhdang ()
{
// TODO: Add your control notification handler code here
CRichEditCtrl * pRE;
int ;
CString tam;
pRE->GetWindowText(tam);
Trang 5pRE-> SetSel (0,-1);
ChangeChar (pRE);
for (i=0;i tam GetLength ();i++) {
if (tam[ ]!=' ' && (tam[ ]<'A'||tam[ ]>'Z') && (tam[ ]<'a'||tam[ ]>'z'))
{
pRE-> SetSel ( , +1);
if ('0'<=tam[ ]&&tam[ ]<='9')
ChangeNumber (pRE);
else
ChangeOther (pRE);
} }
}
Hàm ChangeChar :
void CRECDemoDlg :: ChangeChar ( CRichEditCtrl *pRE) {
CHARFORMAT cf;
cf.dwMask=CFM_BOLD|CFM_COLOR;
cf.dwEffects = CFE_BOLD;
cf.crTextColor=RGB(0,0,255);
}
Các hàm còn l i vi t t ng t
Tham kh o các hàm, các c u trúc có liên quan trong MSDN