2008-10-07 10 views
8

एमएफसी में सीईडीआईटी नियंत्रण में निहित पाठ स्ट्रिंग की अधिकतम लंबाई क्या है? चरित्र 30001 के बाद एक चरित्र जोड़ने की कोशिश करते समय मुझे एक बीप मिलती है, क्या यह कहीं भी दस्तावेज है? क्या मैं सीईडीआईटी में लंबे ग्रंथों को प्रदर्शित कर सकता हूं? क्या मुझे एक और नियंत्रण का उपयोग करना चाहिए?सीईडिट नियंत्रण अधिकतम लंबाई? (वर्णों में यह प्रदर्शित हो सकता है)

जैसा कि "विंडोज प्रोग्रामर" नीचे बताता है, टेक्स्ट लंबाई सीमा समान नहीं होती है जब उपयोगकर्ता टाइप करते हैं जब हम प्रोग्रामविटिक रूप से SetWindowText का उपयोग करके टेक्स्ट सेट करते हैं। प्रोग्राम को व्यवस्थित रूप से सेट करने की सीमा कहीं भी उल्लिखित नहीं है। उपयोगकर्ता टाइपिंग के लिए डिफ़ॉल्ट टेक्स्ट lentgth सीमा गलत है। (नीचे अपना खुद का पोस्ट देखें)।

मुझे लगता है कि मैं पीईडीआईटी-> SetLimitText (0) को प्रोग्रामेटिक और उपयोगकर्ता इनपुट टेक्स्ट लंबाई दोनों की सीमा 7FFFFFFE बाइट्स के लिए कॉल करने के बाद अनुमान लगा रहा हूं। क्या मैं सही हू?

विस्टा में, सीईडीआईटी में 40000 वर्णों से अधिक लंबे समय तक पाठ चिपकाते समय, यह अनुत्तरदायी हो जाता है। इससे कोई फर्क नहीं पड़ता कि मैंने पहले SetLimitText (100000) कहा था।

उत्तर

13

मुझे पता चला कि विस्टा में एक पंक्ति सीईडीआईटी नियंत्रण के लिए डिफ़ॉल्ट आकार का उल्लेख करते समय दस्तावेज़ गलत है।

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) 
} 

प्रलेखन राज्यों:

मैं इस कोड भाग गया

EM_SETLIMITTEXT पहले

कहा जाता है, पाठ की मात्रा एक उपयोगकर्ता एक संपादन नियंत्रण में प्रवेश कर सकते हैं के लिए डिफ़ॉल्ट सीमा नहीं है 32,767 वर्ण।

जो स्पष्ट रूप से गलत है।

+4

वास्तविक परीक्षण हर बार दस्तावेज धड़कता है! – BoltBait

5

आप अपने नियंत्रण पर CEdit::GetLimitText() पर कॉल करके अपने नियंत्रण के लिए अधिकतम क्या पता लगा सकते हैं। यह बाइट्स में वर्ण डेटा के लिए अधिकतम आकार देता है। आप CEdit::SetLimitText() फ़ंक्शन का उपयोग करके अधिकतम आकार बदल सकते हैं।

SetLimitText() फ़ंक्शन EM_SETLIMITTEXT संदेश भेजने के बराबर है। उस संदेश के लिए दस्तावेज़ अधिकतम आकार कि इस्तेमाल किया जा सकता है, लेकिन जब से इन MSDN लिंक है कि शायद कल तक ध्वस्त किया जा सकता हैं, मैं प्रासंगिक जानकारी :)

uint पैरामीटर के रूप में व्याख्या की है नकल करेंगे:

उपयोगकर्ता उपयोगकर्ता की अधिकतम संख्या TCHARs दर्ज कर सकते हैं। एएनएसआई पाठ के लिए, यह बाइट्स की संख्या है; यूनिकोड टेक्स्ट के लिए, यह वर्णों की संख्या है। यह संख्या में शून्य वर्ण को समाप्त करने में शामिल नहीं है। रिच एडिट नियंत्रण: यदि यह पैरामीटर शून्य है, टेक्स्ट की लंबाई 64,000 वर्णों पर सेट है।

Windows NT/2000/XP पर संपादित करें नियंत्रण: इस पैरामीटर शून्य है तो टेक्स्ट लंबाई 0x7FFFFFFE पात्रों एकल लाइन संपादन नियंत्रण के लिए या -1 बहु संपादन नियंत्रण के लिए होने वाली है। विंडोज पर

संपादित करें नियंत्रण 95/98/मुझे: तो इस पैरामीटर शून्य है, पाठ लंबाई एकल लाइन नियंत्रण या 0xFFFF बहु संपादन नियंत्रण के लिए संपादन के लिए 0x7FFE पात्रों को तैयार है।

इसके अलावा, टिप्पणियां अनुभाग से:

EM_SETLIMITTEXT से पहले कहा जाता है, पाठ की मात्रा एक उपयोगकर्ता एक संपादन नियंत्रण में प्रवेश कर सकते हैं के लिए डिफ़ॉल्ट सीमा 32,767 वर्ण है।

Windows NT/2000/XP पर संपादित करें नियंत्रण: एकल लाइन संपादन नियंत्रण के लिए, पाठ सीमा नहीं है या तो 0x7FFFFFFE या wParam पैरामीटर, जो भी कम हो के मूल्य बाइट्स।मल्टीलाइन संपादन नियंत्रण के लिए, यह मान या तो -1 बाइट्स या wParam पैरामीटर का मान, जो भी छोटा हो।

Windows 95/98/Me पर संपादित करें नियंत्रण: एकल लाइन संपादन नियंत्रण के लिए, पाठ सीमा या तो 0x7FFE बाइट या wParam पैरामीटर, जो भी कम हो के मूल्य है। मल्टीलाइन संपादन नियंत्रण के लिए, यह मान या तो 0xFFFF बाइट्स या wParam पैरामीटर का मान है, जो भी छोटा है।

मुझे लगता है वे के बजाय 0xFFFFFFFF वहाँ दूसरा पैराग्राफ में -1 ...

2

मतलब था "(अक्षरों में यह प्रदर्शित कर सकते हैं)"! = "जब एक चरित्र जोड़ने की कोशिश कर"।

"जब कोई चरित्र जोड़ने की कोशिश कर रहा है" == "उपयोगकर्ता द्वारा दर्ज किए जाने वाले टीसीएचएआर की अधिकतम संख्या" जब तक कि आप प्रोग्रामेटिक रूप से किसी चरित्र को जोड़ने का प्रयास नहीं करते हैं।

"0x7FFFFFFE वर्ण"! = "0x7FFFFFFE बाइट्स" कभी-कभी, एक तथ्य जिसे उद्धृत एमएसडीएन पाठ कभी-कभी समझता है।

मैं शर्त लगाऊंगा कि कोई भी मूल प्रश्न का उत्तर नहीं जानता है। लेकिन "0x7FFFFFFE बाइट्स" कई सीमाओं में से एक है।

संबंधित मुद्दे