S DNG RICHEDIT CONTROL
Vn Chí Nam – Nguyn c Hoàng H
Khoa Công ngh Thông tin, Trng H KHTN TP.HCM
(
vcnam@fit.hcmuns.edu.vn, ndhha@fit.hcmuns.edu.vn)
Phiên bn cp nht ngày 16/05/2005
RichEdit control là gì ?
RichEdit control là mt loi control chun ca Windows, dùng cho vic nhp
liu hay hin th các đon vn bn lên dialog. RichEdit control khá ging vi Edit
control.
im đc bit ca RichEdit control so vi Edit control là : RichEdit control cho
phép thit lp tng đnh dng riêng bit trên đn v tng ký t trong control (tc là đi
vi mi ký t trong RichEdit control, chúng ta có th thit lp các đnh dng màu, c
ch, kiu ch… ) trong khi đi vi Edit control chúng ta ch có th có mt thit lp
duy nht đi vi toàn control (không th thit lp đnh dng cho tng ký t riêng l).
Lu ý khi s dng RichEdit control
Khi s dng RichEdit control trong mt chng trình nào đó, có mt hàm quan
trng nu chúng ta quên s dng hay đt hàm đó sai v trí thì s dn đn vic chng
trình không th thc thi đc. Do đó :
NH DÙNG HÀM AfxInitRichEdit() KHI S DNG RICHEDIT
CONTROL VÀ T NÓ TRONG HÀM InitInstance() TRONG C App()
Ví d :
BOOL CRECDemoApp::InitInstance()
{
AfxInitRichEdit();//Quan trng
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;
}
Mt s lu ý khác
o Hin th đc nhiu dòng trong RichEdit control, check
Styles\M
ultiline.
o Hin th scroll, check vào Styles\Horiz
ontal scroll,…
o S dng đc phím Enter trong RichEdit control, check vào
Styles\Want return.
o Không b git màn hình khi đnh dng lng ln 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();
}
MT S CU TRÚC, HÀM THNG GP
Cu trúc CHARFORMAT
typedef struct _charformat {
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
TCHAR szFaceName[LF_FACESIZE];
} CHARFORMAT;
i vi cu trúc CHARFORMAT này, tham kho thêm trong MSDN phn
CHARFORMAT. đây, chúng tôi ch đ cp mt s vn đ có liên quan xung quanh
cu trúc này:
o Cu trúc này dùng cho đnh dng các ký t trong RichEdit control sau
khi đã đc chn.
o Thành phn cbSize luôn đc s dng và nh đt :
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
o Thành phn dwMask cho bit nhng thuc tính (đnh dng) nào có s
thay đi:
VD :
cf.dwMask=CFM_ITALIC|CFM_COLOR|CFM_BOLD;
Cho bit 3 thuc tính v đ nghiên (Italic), màu sc (Color), thuc tính đm
(Bold) s có s thay đi.
o i lin vi thành phn dwMask là thành phn dwEffects. Thành phn
này dùng đ gán (hoc loi b) thuc tính đnh dng đã đc đa ra
trong thành phn dwMask. Các thuc tính có nh hng t dwEffects là
Bold, Italic, Underlined, hay StrikeOut…Nu mun gán mt thuc tính
nào thêm ta dùng toán t | và loi b thuc tính nào ta dùng toán t & và
toán t ~.
Ví d :
thit lp các thuc 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 phn ca cu 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");
HÀM SetSel VÀ HÀM SetSelectionCharFormat
thit lp đnh dng cho mt đon vn bn ta thc hin các bc sau :
o Chn đon vn bn đó (dùng hàm SetSel). Lu ý, nu mun chn toàn
b ni dung ca control thì dùng SetSel(0,-1).
o Thit lp các thuc tính cn thay đi ca đon vn bn thông qua cu
trúc CHARFORMAT.
Thay đi đnh dng cho đon vn bn thông hàm SetSelectionCharFormat.
VÍ D MINH HO
Thit k dialog nh hình di đây.
Cho phép
o Ngi s dng nhp nhng dòng vn bn vào hp RichEditCtrl.
o Khi ngi s dng bm nút Dinh Dang, các ký t trong hp Rich Edit
Ctrl đc đnh dng theo mt tiêu chun nào đó. Chng hn : các ký t
t A đn Z : màu xanh, các ký s (0-9) : màu đ, các ký t đc bit khác
: màu đen…
Vit hàm đnh dng
void CRECDemoDlg::OnDinhdang()
{
// TODO: Add your control notification handler code here
CRichEditCtrl* pRE;
int i;
pRE = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
CString tam;
pRE->GetWindowText(tam);
pRE->SetSel(0,-1);
ChangeChar(pRE);
for (i=0;i<tam.GetLength();i++)
{
if (tam[i]!=' ' && (tam[i]<'A'||tam[i]>'Z') &&
(
tam[i]<'a'||tam[i]>'z'))
{
pRE->SetSel(i,i+1);
if ('0'<=tam[i]&&tam[i]<='9')
ChangeNumber(pRE);
else
ChangeOther(pRE);
}
}
}
Hàm ChangeChar :
void CRECDemoDlg::ChangeChar(CRichEditCtrl *pRE)
{
CHARFORMAT cf;
cf.cbSize = sizeof(CHARFORMAT);
cf.dwMask=CFM_BOLD|CFM_COLOR;
cf.dwEffects = CFE_BOLD;
cf.crTextColor=RGB(0,0,255);
pRE->SetSelectionCharFormat(cf);
}
Các hàm còn li vit tng t.
Tham kho các hàm, các cu trúc có liên quan trong MSDN.
. TODO: Add your control notification handler code here
CRichEditCtrl* pRE;
int i;
pRE = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
LockWindowUpdate();. TODO: Add your control notification handler code here
CRichEditCtrl* pRE;
int i;
pRE = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT1);
CString tam;