Tôi đã liên hệ với bộ phận hỗ trợ của microsof.
Mục tiêu là có khoảng 240000 ký tự trong một dòng dòng văn bản có thể chỉnh sửa.
Tôi có thể tạo lại sự cố trên Windows Vista (x64 và x32 cả hai) nhưng không trên Windows XP.
mã này hoạt động tốt trong XP:
BOOL ClongeditXPDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
UINT limit = m_longEdit.GetLimitText();
m_longEdit.SetLimitText(240000);
UINT limit2 = m_longEdit.GetLimitText();
CString str;
str = _T("");
for(int i = 0; i < 250000; i++)
str += _T("a");
m_longEdit.SetWindowText(str);
return TRUE; // return TRUE unless you set the focus to a control
}
Nếu tôi sử dụng một điều khiển CRichEdit thay vào đó, khi tôi bấm "kết thúc" chìa khóa hoặc "quyền mũi tên" chìa khóa sau khi dán một chuỗi dài bên trong, i không thể thấy tất cả các ký tự trong Kiểm soát chỉnh sửa đa dạng. cố gắng cuộn qua ký tự cuối cùng có thể nhìn thấy tạo ra tiếng bíp. Phần còn lại của các ký tự ở đó, tôi biết điều này vì nếu tôi nhấp đúp vào Rich Chỉnh sửa và sao chép văn bản bằng cách sử dụng ctrl-c và sau đó dán nó vào văn bản trình chỉnh sửa, tôi có thể thấy các ký tự 240000 . Vì vậy, kiểm soát đang giữ số lượng ký tự phù hợp, nhưng các ký tự cuối cùng không thể xem được ngoại trừ trong trình chỉnh sửa bên ngoài, vì vậy, vẫn còn vấn đề ban đầu của tôi.
Sau đây là các câu trả lời bằng đại diện microsoft:
Vấn đề ở đây là một điều khiển sửa với một số lượng lớn các nhân vật trong nó không vẽ văn bản của nó.
Tôi đã thử đặt các ký tự khác nhau, và phát hiện ra rằng tôi có thể vừa với nhiều hơn 'l' hơn 'x' hơn 'm'.Vấn đề không trực tiếp là số lượng ký tự, nhưng có thể là số pixel. Nhân số lượng các ký tự hiển thị theo chiều rộng pixel của các ký tự trong phông chữ được chọn cho biết giới hạn là khoảng 32k pixel.
câu trả lời khác từ microsoft:
tôi đã nghiên cứu sâu rộng về vấn đề này và muốn cập nhật cho bạn về sự tiến bộ hợp cụ thể.
Sự khác biệt chính giữa Sửa kiểm soát trên Vista và XP là rằng Edit kiểm soát trên Vista trước soạn glyphs của mình cho tốt hơn hỗ trợ quốc tế (trong nội bộ, nó kết thúc lên gọi ExtTextOut với ETO_GLYPH_INDEX và một mảng của glyphs chứ không phải là một chuỗi ký tự. này kết thúc tiết kiệm các chỉ số glyph thành một Metafile và do đó chạy vào giới hạn điểm ảnh 32k. Khi quá nhiều ký tự được cung cấp, ExtTextOut thất bại và rút ra gì cả. chỉnh sửa contr ol trên XP không giới hạn các hình ảnh glyph và do đó không có vấn đề này , nhưng cũng không xử lý các ký tự quốc tế .
Điều khiển chỉnh sửa trên XP sẽ cắt tại 32k, nhưng vì điều đó không có màn hình, nên không rõ ràng. Khi cuộn đến số , nó bắt đầu bằng ký tự hiển thị đầu tiên để phần hiển thị của điều khiển luôn sớm hơn 32k pixel.
Điều khiển RichEdit vẽ số bắt đầu, nhưng sau khi nhấn Kết thúc, chỉnh sửa xảy ra chủ yếu là không có màn hình. RichEdit 3.0 và 4.1 cho hành vi tương tự . Điều này có vẻ là giới hạn 32k pixel của RichEdit, dưới dạng nó vẽ văn bản của nó trên một bitmap ngoài màn hình trước khi hiển thị nó ở màn hình .
Xem xét các điểm này, hành vi là theo thiết kế. Bạn sẽ cần phải tạo kiểm soát của riêng bạn để có được hành vi hiển thị dưới dạng chuỗi lớn như 240000 trong một dòng.
và mới nhất:
tôi đã nghiên cứu sâu hơn về vấn đề này cho việc tìm kiếm bất kỳ trọng lượng nhẹ workaround khắc phục 32k pixel giới hạn, nhưng tiếc là có vẻ như không có cách giải quyết cho điều này.
Một vài lựa chọn thay thế mà chúng tôi đã thử là là RichEdit 3.0, RichEdit 4.1, sử dụng UniScribe, sử dụng phông chữ khác nhau, v.v.
Có thể, bạn sẽ cần phải tạo điều khiển tùy chỉnh của riêng bạn nếu bạn muốn hiển thị một có thể chỉnh sửa đơn dòng chuỗi vượt quá 32k giới hạn điểm ảnh trong Windows Vista.
Có toàn bộ ứng dụng treo hoặc chỉnh sửa hộp chỉ dừng hoạt động? – Aardvark
Hộp chỉnh sửa chỉ dừng hoạt động. – rec