2009-08-24 31 views
5

Tôi có một ứng dụng MFC lớn mà tôi đang mở rộng để cho phép nhập liệu đa ngôn ngữ. Tại thời điểm này, tôi cần cho phép người dùng nhập dữ liệu Unicode trong các hộp chỉnh sửa trên một hộp thoại.Piecewise chuyển đổi một ứng dụng MFC sang Unicode/MBCS

Có cách nào để thực hiện việc này mà không bật UNICODE hoặc MBCS cho toàn bộ ứng dụng không? Tôi chỉ cần một phần nhỏ của ứng dụng được chuyển đổi vào lúc này. Có thể làm được điều này, và nếu có, làm thế nào?


Làm rõ: Tôi có thể sử dụng :: GetWindowTextW() để lấy thông tin Unicode ra khỏi cửa sổ. Tôi đang cố gắng tìm hiểu cách cho phép người dùng nhập văn bản Unicode trong cửa sổ. Hiện tại, ký tự mà người dùng nhập bên ngoài mã windows-1252 hiển thị dưới dạng '?'. Có cách nào để sửa lỗi này?

+1

Tại sao bạn không thể sử dụng Unicode hoàn chỉnh? –

Trả lời

0

Chỉ cần suy nghĩ - bạn có thể thử bật UNICODE cho bản dựng của bạn và sử dụng các cuộc gọi ANSI nơi bạn cần (ví dụ: CStringA).

(Tôi hiểu rằng điều này có thể không phải là một lựa chọn cho bạn, nhưng nghĩ rằng nó có giá trị chỉ ra rằng bạn có thể giải quyết vấn đề này theo chiều ngược lại) slideshow

+0

Tôi không thể làm điều đó trong trường hợp này. Sẽ có hàng chục ngàn cuộc gọi để săn lùng và chuyển đổi. –

4

Để cho phép CEdit để hiển thị các ký tự Unicode, bạn nên tạo ra nó với CreateWindowW chức năng. Tôi vừa thử nghiệm nó trong chương trình ANSI MFC.

// allows Unicode characters 
CreateWindowW(L"EDIT", L"", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0); 

// shows Unicode characters as ? 
CreateWindow("EDIT", "", WS_CHILD|WS_VISIBLE, 10, 10, 50, 20, GetSafeHwnd(), 0, 0, 0); 

Bạn có thể tạo tất cả các hộp chỉnh sửa theo cách thủ công trong OnInitDialog chức năng của hộp thoại. Và sau đó phân lớp chúng thành lớp CMyEdit tùy chỉnh với hỗ trợ Unicode.

2

Bạn có thể thay thế các hộp chỉnh sửa này bằng các điều khiển chỉnh sửa đa dạng không? Sau đó, bạn có thể nhập các ký tự quốc tế ngay cả trong một xây dựng không Unicode; nội bộ, chúng sẽ được mã hóa rtf, nhưng sau đó khi bạn truyền văn bản ra khỏi điều khiển, bạn có thể sử dụng định dạng SF_UNICODE để lấy biểu diễn Unicode.

Các vấn đề liên quan