12.07.2015 Views

SỬ DỤNG UNICODE TRONG VISUAL C++ 6.0

SỬ DỤNG UNICODE TRONG VISUAL C++ 6.0

SỬ DỤNG UNICODE TRONG VISUAL C++ 6.0

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

SỬ DỤNG <strong>UNICODE</strong> <strong>TRONG</strong> <strong>VISUAL</strong> <strong>C++</strong> <strong>6.0</strong>Văn Chí NamKhoa Công nghệ Thông tin, Trường ĐHKHTN TP.HCM(vcnam@fit.hcmuns.edu.vn)Ngày cập nhật: 25/05/2006GIỚI THIỆUUnicode đã trở thành bảng mã chuẩn trên toàn thế giới. Việc sử dụng Unicode trongcác ứng dụng trên hệ điều hành Windows (từ phiên bản Windows 2000 trở về sau) trởthành điều bắt buộc hiển nhiên. Song, việc hỗ trợ Unicode trên môi trường lập trìnhVisual <strong>C++</strong> <strong>6.0</strong> không được mạnh mẽ cho lắm và gây nhiều khó khăn cho lập trìnhviên khi tạo các ứng dụng có sử dụng Unicode (trong trình bày, đọc và ghi file…).Bài viết này giới thiệu các thao tác cơ bản cần thiết ở mức đơn giản nhất để người đọccó thể dễ dàng tạo ứng dụng và sử dụng Unicode trong các ứng dụng được tạo.MỘT SỐ ĐIỂM LƯU ÝThiết lập thông sốThiết lập các thông tin sử dụng Unicode cho project- Thêm macro _<strong>UNICODE</strong> (chỉ sử dụng từ Windows 2000 trở lên). VàoProjects\Settings. Chọn tab C/<strong>C++</strong> và category là Preprocessor.


- Thêm wWinMainCRTStartup vào trong Entry-point symbol. Chọn tab Link vàcategory là Output.Các DLL dùng cho UnicodeCác MFC DLL có dùng sử dụng ký tự U(nicode) trong tên. Nếu sử dụng thư việnMFC phiên bản 4.0, 4.2 thì có các DLL sau đây:- MFC40U.DLL- MFC42U.DLL- MFCO42UD.DLL- MFC42UD.DLL(Trong lúc cài đặt nếu không có chọn cài đặt các thư viện, DLL hỗ trợ Unicode thì cóthể chép các file này từ đĩa cài đặt của Visual <strong>C++</strong>).Sử dụng chuỗi UnicodeĐơn giản nhất khi sử dụng chuỗi unicode là sử dụng lớp CString của thư viện MFC.Tuy nhiên, lưu ý phải sử dụng thêm macro _T với các chuỗi trong các ứng dụng códùng Unicode.Ví dụ:CString str;str = _T(“Hello world”);Hoặc


MessageBox(_T(“This is a demo”));Gõ tiếng Việt Unicode trong Visual <strong>C++</strong> <strong>6.0</strong>Môi trường soạn thảo Visual <strong>C++</strong> <strong>6.0</strong> không cho phép gõ Unicode tiếng Việt có dấudạng tổ hợp hoặc dựng sẵn như những chương trình soạn thảo văn bản khác. Thay vàođó, chúng ta phải sử dụng dạng Unicode C String được thiết lập sẵn trong các bộ gõtiếng Việt phổ biến hiện nay (như Unikey và Vietkey).Ví dụ:CString str;str = _T(“Minh ho\x1EA1 s\x1EED \x64\x1EE5ng Uni\x63o\x64\x65”);MessageBox(str); //Minh hoạ sử dụng UnicodeĐọc và ghi file text UnicodeCó thể sử dụng các lớp CTextFileRead, CTextFileWrite và CTextFileBase của tác giảPEK từ trang web Code Project để sử dụng việc đọc và ghi file text Unicode (xemthêm tại địa chỉ http://www.codeproject.com/file/textfiledocument.asp ). Đây là cáclớp hỗ trợ việc đọc (CTextFileRead) , ghi (CTextFileWrite) các file text dạng ANSIhoặc Unicode (Unicode 16 bit – LE, Unicode 16 bit BE, UTF-8).Lớp CTextFileBase là lớp cơ sở cho 2 lớp đọc và ghi kế thừa. Qua lớp này chúng tacó thể xác định được loại encoding Unicode được sử dụng (GetEncoding),…Lớp CTextFileRead cho phép đọc từ dòng (ReadLine) hoặc đọc toàn bộ văn bản(Read).Lớp CTextFileWrite cho phép ghi một chuỗi Unicode xuống file (Write) và ghi ký tựxuống dòng (WriteEndl).Ví dụ: Đọc dòng đầu tiên từ tập tin test.txt.CTextFileRead file("test.txt");CString str;file.ReadLine(str);file.Close();hoặc ghi một chuỗi xuống tập tin test.txt sử dụng encoding UTF_8.CTextFileWrite file("test.txt", CTextFileBase::UTF_8);file.Write(str);file.Close();


MINH HOẠYêu cầuXây dựng ứng dụng minh hoạ cho phép hiển thị Unicode trên các control của nó nhưhình ảnh dưới đây:Thiết kế dialog


Thiết lập chuỗi tiếng Việt có dấu Unicode cho các controlvoid CTestUnicodeDlg::OnButton1(){// TODO: Add your control notification handler code hereCWnd *pWnd;pWnd = GetDlgItem(IDC_STATIC1);//Dòng này viết bằng UnicodepWnd->SetWindowText(_T("\x44òng \x63h\x1EEF này vi\x1EBFt\x62\x1EB1ng Uni\x63o\x64\x65"));pWnd = GetDlgItem(IDC_EDIT1);//Hiển thị Unicode thật đơn giảnpWnd->SetWindowText(_T("Hi\x1EC3n th\x1ECBUni\x63o\x64\x65 th\x1EADt \x111\x1A1n gi\x1EA3n"));pWnd = GetDlgItem(IDC_BUTTON1);//Mời thửpWnd->SetWindowText(_T("M\x1EDDi th\x1EED"));//Đây là chương trình minh hoạ Unicodethis->SetWindowText(_T("\x110ây là \x63h\x1B0\x1A1ngtrình minh ho\x1EA1 Uni\x63o\x64\x65"));// Thử dùng Unicode, Tiêu đề UnicodeMessageBox(_T("Th\x1EED \x64ùngUni\x63o\x64\x65"),_T("Tiêu \x111\x1EC1 Uni\x63o\x64\x65"));}Đọc file text Unicode


void CTestUnicodeDlg::OnButton2(){// TODO: Add your control notification handler code hereCTextFileRead file(_T("Test.txt"));CTextFileWritefileWrite(_T("Output.txt"),CTextFileWrite::UNI16_LE);CString allText;file.Read(allText); //DocfileWrite.Write(allText); //GhiCWnd *pWnd;pWnd = GetDlgItem(IDC_EDIT1);pWnd->SetWindowText(allText); //Hien thi len control}file.Close();fileWrite.Close();TÀI LIỆU THAM KHẢONguyễn Văn Hiệp, Mã Unicode tiếng Việt - Hiện thực trong Windows và Linux, PCWorld Việt Nam, 12/2001, trang 68 – 76PEK, CTextFileDocument, Code Project (www.codeproject.com), URL =http://www.codeproject.com/file/textfiledocument.asp (Update: 24/05/2005)

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!