VicoTas
Câu hỏi
dang duc thang thang_star
26/04/2013 21:37

Trong Visual C++ 6.0 làm thế nào hiển thị được tiếng Việt trong các menu và dialog tự tạo?

Xin hỏi trong Visual C++ 6.0 làm thế nào hiển thị được tiếng Việt trong các menu và dialog tự tạo không?

Danh sách câu trả lời (1)
Mạnh Linh thieugia88 26/04/2013 21:37
Có 2 trường hợp sử dụng mã tiếng Việt khác nhau:
1. Nếu bạn dùng mã tiếng Việt nào đó chứ không phải mã Unicode (Vni, BK, ABC, Vietware...) thì việc hiển thị chuỗi tiếng Việt trong các phần tử giao diện như hộp thoại, menu... gồm các bước thao tác điển hình như sau:

- Cài các font chữ hỗ trợ bảng mã tiếng Việt mà bạn dự định dùng vào Windows, chạy tiện ích Control Panel.Display, chọn tab Appearance, chọn button Advanced, thiết lập font chữ cho các đối tượng giao diện về font chữ hỗ trợ bảng mã của bạn. Lưu ý bạn có thể tự động hóa việc thiết lập sơ đồ font chữ cho các đối tượng giao diện bằng đoạn code trong ứng dụng của bạn. Chúng tôi đã giới thiệu đoạn code này nhiều lần trong các số báo trước.

- Cài đặt và chạy tiện ích gõ phím tiếng Việt hỗ trợ nhập chuỗi tiếng Việt theo bảng mã mà bạn dự định dùng.

- Mở lại/tạo mới Project VC++ chứa ứng dụng của bạn (thường thuộc loại "MFC AppWizard (exe)"), thiết kế từng đối tượng giao diện cần dùng cho ứng dụng (menu, toolbar, dialog...). Khi tạo mới đối tượng giao diện nào có thuộc tính font chữ thì hãy thiết lập lại thuộc tính này về font chữ hỗ trợ bảng mã tiếng Việt của bạn. Bạn sẽ thấy trực quan các chuỗi tiếng Việt khi chúng mới được nhập vào tại thời điểm thiết kế trực quan. Khi ứng dụng chạy, chúng cũng sẽ được hiển thị đúng y như lúc thiết kế.

2. Nếu bạn dùng mã tiếng Việt Unicode (mỗi ký tự chiếm 2 byte ô nhớ) thì việc hiển thị chuỗi tiếng Việt trong các phần tử giao diện như hộp thoại, menu... sẽ khó khăn hơn. Lý do là môi trường thiết kế trực quan VC++ 6.0 chưa hỗ trợ việc nhập/hiển thị chuỗi văn bản tiếng Việt Unicode (mặc dù ngôn ngữ VC++ thì hỗ trợ). Qui trình xây dựng giao diện hiển thị đúng chuỗi tiếng Việt Unicode gồm các bước thao tác điển hình như sau:

- Cài các font chữ hỗ trợ bảng mã tiếng Việt Unicode vào Windows. Lưu ý rằng Windows đã có sẵn một ít font chữ hỗ trợ được bảng mã tiếng Việt Unicode như Arial, Times New Roman, Tahoma... Ở chế độ mặc định, bản thân Windows XP đã dùng các font chữ hỗ trợ tốt mã Unicode tiếng Việt, tuy nhiên nếu muốn thiết lập lại các font chữ của bạn, hãy chạy tiện ích Control Panel.Display, chọn tab Appearance, chọn button Advanced, thiết lập font chữ cho các đối tượng giao diện về font chữ hỗ trợ mã Unicode vừa cài đặt. Lưu ý bạn có thể tự động hóa việc thiết lập sơ đồ font chữ cho các đối tượng giao diện bằng đoạn code trong ứng dụng của bạn. Chúng tôi đã giới thiệu đoạn code này nhiều lần trong các số báo trước.

- Cài đặt và chạy tiện ích gõ phím tiếng Việt hỗ trợ nhập chuỗi tiếng Việt Unicode, nhất là bảng mã utf-8.
- Mở lại/tạo mới Project VC++ chứa ứng dụng của bạn (thường thuộc loại "MFC AppWizard (exe)"), thiết kế từng đối tượng giao diện cần dùng cho ứng dụng (menu, toolbar, dialog...). Khi tạo mới đối tượng giao diện nào có thuộc tính font chữ thì hãy thiết lập lại thuộc tính này về font chữ hỗ trợ mã tiếng Việt Unicode. Bạn sẽ không thể nhập/hiển thị trực quan các chuỗi tiếng Việt trong lúc thiết kế trực quan hay trong khi viết code mã nguồn trong môi trường VC++ 6.0, do đó bạn hãy nhập các chuỗi không dấu.

- Khai báo trong chương trình nguồn (ở vị trí thích hợp) các biến array chứa các chuỗi utf-8 được dùng trong các đối tượng giao diện. Hãy chuyển trình gõ phím về chế độ tạo mã utf-8 và nhập tuần tự các chuỗi cần dùng. Thí dụ, thanh menubar của ứng dụng và nội dung chi tiết của menu pop-up "File" được thiết kế như sau:

Nhưng khi chương trình chạy, bạn muốn nó được Việt hóa như sau:
thì bạn hãy viết đoạn code hiệu chỉnh động các chuỗi caption cho thanh menubar và cho menu pop-up "File" như sau (đoạn code dưới đây được đặt trong hàm CMainFrame::OnCreate() là tốt nhất):
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
//đoạn code được sinh tự động bởi VC++
...
//đoạn code viết thêm bởi bạn
//khai báo các biến cần dùng
wchar_t buf[256];
int i;
//khai báo các chuỗi utf-8 cho thanh menubar
char *strMenuBar[] = {
"Tệp",
"Soạn thảo",
"Xem",
"Trợ giúp"
};
//xác định handle của thanh menubar
HMENU hMainMenu=::GetMenu(m_hWnd);
//Việt hóa thanh menubar
for (i = 0; i < 4; i++) {
//dịch chuỗi utf-8 thành UCS-2
::MultiByteToWideChar(CP_UTF8,0,strMenuBar,-1,buf,256);
//cập nhật lại menu thứ i trong menubar
::ModifyMenu(hMainMenu,i, MF_BYPOSITION | MF_STRING, i, buf);
}
//khai báo các chuỗi utf-8 cho menu "File"
char *strFileMenu[] = {
"Tạo mới",
"Mở tệp...",
"Lưu",
"Lưu như...",
"-",
" Đóng"
};
//xác định handle của menu "File"
HMENU hFileMenu = ::GetSubMenu(hMainMenu,0);
//Việt hóa menu "File"
for (i = 0; i < 6; i++) {
if (strcmp (strFileMenu,"-")) {
//dịch chuỗi utf-8 thành UCS-2
::MultiByteToWideChar(CP_UTF8,0,strFileMenu,-1,buf,256);
//cập nhật lại option thứ i trong menu
::ModifyMenu(hFileMenu,i, MF_BYPOSITION | MF_STRING, i, buf);
}
}
//Việt hóa các menu & các đối tượng khác nếu cần
...
return 0;
}
- Chọn menu Project.Settings để mở cửa sổ "Project Settings", chọn tab "C/C++", nhập thêm chuỗi ",_UNICODE" sau nội dung có sẵn trong textbox "Preprocessor definitions" để dịch chương trình chạy ở chế độ Unicode. Chọn tab Link, chọn Output trong mục Category, nhập chuỗi "wWinMainCRTStartup" vào textbox "Entry-point symbol:".

- Dịch ứng dụng và chạy thử ứng dụng. Khi ứng dụng chạy, các chuỗi tiếng Việt Unicode trong menubar và trong menu "File" sẽ được hiển thị đúng y như mong muốn.
Trả lời câu hỏi
Tải lại mã
Câu hỏi lĩnh vực Lập trình
MrTien Máy tôi ko cài đc tiếng việt?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Vinh Có bạn nào biết quy trình buôn bán mỹ phẩm và đồ trang sức không?

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

nophoto Có bác nào đã làm eProject quản lý danh sách khách hàng cho mình mượn tham khảo với.

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Đức Việt HELP me làm hình nền cho blog với!

Đăng lúc: 21:37 - 26/04/2013 trong Lập trình

Uk Làm gì để chương trình con nhận giá trị của biến?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

NgocUk Lập trình web bị lỗi?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

NgocUk Tạo đồng hồ đếm ngược bằng Visual Basic?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

Vinh Trong Visual C++ 6.0 làm thế nào hiển thị được tiếng Việt trong các menu và dialog tự tạo?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

lighting Giúp mình mã giả kiểm tra số nguyên tố?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

Đức Vân Giúp mình lập chương trình này với?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

NgocUk Ai giúp mình học Pascal 7.0 với?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

Hin Cho em hỏi các bác ai biết lập trình tìm số hoàn hảo. Chỉ dùm em với?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

Củ Chuối Cố định layout khi tràn Text ?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

Vinh Anh chị 3C làm ơn cho em hỏi về cách tạo file PDF tiếng việt với PHP với được không ạ?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

NgocUk Làm ơn chỉ cho em cách cài đặt UML Linux với được không?

Đăng lúc: 21:36 - 26/04/2013 trong Lập trình

lighting Các anh chị làm ơn có thể hướng dẫn em cách tạo đĩa tự cài đặt Windown XP với được không ạ? Em xin cảm ơn.

Đăng lúc: 21:35 - 26/04/2013 trong Lập trình

Nguyễn Văn Siêu Bài tập Pascal giải giúp mình với . Gấp Gấp

Đăng lúc: 21:35 - 26/04/2013 trong Lập trình

Đức Vân Hiện dung lượng và tốc độ khi upload dữ liệu?

Đăng lúc: 21:35 - 26/04/2013 trong Lập trình

Lê Thị Hoa Hồng Giải hộ tớ bài lập trình này với các bạn ơi

Đăng lúc: 21:35 - 26/04/2013 trong Lập trình

vietnamconnection Nhập vào một mảng n số nguyên tìm số min

Đăng lúc: 21:35 - 26/04/2013 trong Lập trình

Rao vặt Siêu Vip