2008-10-07 31 views
8

Độ dài tối đa của chuỗi văn bản có trong điều khiển CEdit trong MFC là bao nhiêu? Tôi nhận được một tiếng bíp khi cố gắng thêm một nhân vật sau khi nhân vật 30001 là tài liệu này bất cứ nơi nào? Tôi có thể hiển thị văn bản dài hơn trong CEdit không? Tôi có nên sử dụng điều khiển khác không?Kiểm soát độ dài tối đa của CEdit? (trong các ký tự nó có thể hiển thị)

Khi "Lập trình viên Windows" nói xuống dưới đây, giới hạn độ dài văn bản không giống nhau khi người dùng nhập như khi chúng tôi đặt văn bản bằng văn bản bằng cách sử dụng SetWindowText. Giới hạn để đặt văn bản theo chương trình không được đề cập ở bất kỳ đâu. Giới hạn lentgth văn bản mặc định để nhập người dùng sai. (xem bài đăng của tôi dưới đây).

Tôi đoán rằng sau khi tôi gọi pEdit-> SetLimitText (0), giới hạn cho cả chiều dài văn bản đầu vào của chương trình và người dùng là 7FFFFFFE byte. Tôi có đúng không?

Trong vista, khi dán văn bản dài hơn 40000 ký tự vào CEdit, nó sẽ không phản hồi. Nó không quan trọng nếu tôi gọi SetLimitText (100000) trước đây.

Trả lời

13

Tôi thấy tài liệu sai khi đề cập đến kích thước mặc định cho một điều khiển CEdit đơn lẻ trong vista.

tôi chạy mã này:

CWnd* pWnd = dlg.GetDlgItem(nItemId); 
CEdit *edit = static_cast<CEdit*>(pWnd); //dynamic_cast does not work 
if(edit != 0) 
{ 
    UINT limit = edit->GetLimitText(); //The current text limit, in bytes, for this CEdit object. 
    //value returned: 30000 (0x7530) 
    edit->SetLimitText(0); 
    limit = edit->GetLimitText(); 
    //value returned: 2147483646 (0x7FFFFFFE) 
} 

các tiểu bang tài liệu:

Trước EM_SETLIMITTEXT được gọi, giới hạn mặc định cho số lượng văn bản người dùng có thể nhập vào một điều khiển chỉnh sửa là 32.767 ký tự.

rõ ràng là sai.

+4

Kiểm tra thực tế đánh bại tài liệu mỗi lần! – BoltBait

5

Bạn có thể tìm hiểu mức tối đa cho điều khiển của mình bằng cách gọi CEdit::GetLimitText() trên tầm kiểm soát của bạn. Điều này trả về kích thước tối đa cho dữ liệu ký tự theo byte. Bạn có thể thay đổi kích thước tối đa bằng chức năng CEdit::SetLimitText().

Hàm SetLimitText() tương đương với việc gửi thông báo EM_SETLIMITTEXT. Tài liệu cho thông báo đó cung cấp các kích thước tối đa có thể được sử dụng, nhưng vì đây là các liên kết MSDN có thể sẽ bị hỏng vào ngày mai, tôi sẽ sao chép thông tin liên quan :)

Tham số UINT được hiểu là:

Số lượng tối đa TCHAR mà người dùng có thể nhập. Đối với văn bản ANSI, đây là số byte ; đối với văn bản Unicode, đây là số ký tự. Số điện thoại này không bao gồm ký tự rỗng . Chỉnh sửa chi tiết điều khiển: Nếu tham số này bằng 0, độ dài văn bản được đặt thành 64.000 ký tự.

Sửa điều khiển trên Windows NT/2000/XP: Nếu tham số này là số không, độ dài văn bản được thiết lập để 0x7FFFFFFE ký tự cho single-line chỉnh sửa điều khiển hoặc -1 cho chỉnh sửa điều khiển có nhiều dòng.

Sửa điều khiển trên Windows 95/98/Me: Nếu tham số này là số không, độ dài văn bản được thiết lập để nhân vật 0x7FFE cho single-line chỉnh sửa điều khiển hoặc 0xFFFF cho chỉnh sửa điều khiển có nhiều dòng.

Ngoài ra, từ phần chú thích:

Trước EM_SETLIMITTEXT được gọi, giới hạn mặc định cho số lượng văn bản người dùng có thể nhập vào một điều khiển chỉnh sửa là 32,767 ký tự.

Sửa điều khiển trên Windows NT/2000/XP: Đối với single-line chỉnh sửa điều khiển, các văn bản giới hạn là một trong hai 0x7FFFFFFE byte hoặc giá trị của tham số wParam, nào là nhỏ hơn.Đối với các điều khiển chỉnh sửa nhiều dòng , giá trị này là –1 byte hoặc giá trị của thông số wParam , tùy theo mức nào nhỏ hơn.

Sửa điều khiển trên Windows 95/98/Me: Đối với single-line chỉnh sửa điều khiển, giới hạn văn bản là một trong hai byte 0x7FFE hoặc giá trị của tham số wParam, nào là nhỏ hơn. Đối với các điều khiển chỉnh sửa nhiều dòng , giá trị này là 0xFFFF byte hoặc giá trị của thông số w2aram , tùy theo mức nào là nhỏ hơn.

Tôi cho rằng họ có nghĩa là 0xFFFFFFFF thay vì -1 trong đoạn thứ hai có ...

2

"(bằng ký tự nó có thể hiển thị)"! = "Khi cố gắng thêm một nhân vật".

"khi cố gắng thêm ký tự" == "Số lượng TCHAR tối đa mà người dùng có thể nhập" trừ khi bạn có nghĩa là cố gắng thêm một ký tự theo chương trình.

"0x7FFFFFFE ký tự"! = "0x7FFFFFFE byte" ngoại trừ đôi khi, một thực tế mà văn bản MSDN được trích dẫn hiểu đôi khi.

Tôi sẽ đặt cược không ai biết câu trả lời cho câu hỏi ban đầu. Nhưng "0x7FFFFFFE byte" có thể là một trong nhiều giới hạn.

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