Hướng dẫn thực hành Lập trình C trên Windows - Sử dụng Richedit Control

Đểchèn một record vào bảng, chúng ta sửdụng hàm sau:

void CUseListCtrlDlg::InsertStudent(CString Code, CString Name,

COleDateTime Birthday, BOOL IsMale, CString Addr)

{

 static unsigned int index = 0;

CString Temp;

 // Chèn thêm một record ởdòng thứindex

m_StdList.InsertItem(index,Code);

// Ghi dữliệu vào cột thứ0 với nội dung trong biến Code ởdòng thứindex

pdf5 trang | Chuyên mục: Visual C++ | Chia sẻ: dkS00TYs | Lượt xem: 1753 | Lượt tải: 3download
Tóm tắt nội dung Hướng dẫn thực hành Lập trình C trên Windows - Sử dụng Richedit Control, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
SỬ 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; 
} 
Mộ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; 
 BYTE 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"); 
HÀ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 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]'Z') && 
(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 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. 

File đính kèm:

  • pdfHướng dẫn thực hành Lập trình C trên Windows - Sử dụng Richedit Control.pdf