2008-10-07 120 views
8

MFC中CEdit控件中包含的文本字符串的最大長度是多少?在字符30001之後嘗試添加字符時,我會聽到一聲嘟嘟聲嗎?我可以在CEdit中顯示更長的文本嗎?我應該使用其他控件嗎?CEdit控制最大長度? (以字符顯示)

正如下面的「Windows程序員」所說,當用戶鍵入的時候,文本長度限制與我們使用SetWindowText編程設置文本時不一樣。編程設置文本的限制在任何地方都沒有提及。用戶輸入的默認文本lentgth限制是錯誤的。 (請參閱下面我自己的帖子)。

我猜後我請pEdit-> SetLimitText(0)的極限兩者編程和用戶輸入的文本長度爲7FFFFFFE字節。我對嗎?

在Vista中,當將長度超過40000個字符的文本粘貼到CEdit中時,它變得無響應。先前調用SetLimitText(100000)無關緊要。

回答

13

我發現在提及Vista中單行CEdit控件的默認大小時文檔是錯誤的。

我跑這個代碼:

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 2008-10-15 21:01:11

5

你可以找出最大的是什麼,你的控制在您的調用控件CEdit::GetLimitText()。這將返回字符數據的最大字節數。您可以使用CEdit::SetLimitText()函數更改最大尺寸。

SetLimitText()函數相當於發送EM_SETLIMITTEXT消息。該消息的文檔提供了可使用的最大尺寸,但由於這些都是MSDN鏈接,可能會在明天被打破,我會複製

的UINT參數被解釋爲相關信息:):

用戶 可以輸入的TCHAR的最大數量。對於ANSI文本,這是 字節數;對於Unicode文本, 這是字符數。此 號碼不包括終止空字符的 。豐富的編輯 控制:如果這個參數是零, 文本長度爲64,000 字符。在Windows NT/2000/XP

編輯控件: 如果這個參數是零,文字 長度設置爲0x7FFFFFFE字符 單行編輯控件或-1 多行編輯控件。在Windows

編輯控件95/98/Me的:如果 這個參數是零時,文本 長度設置爲0x7FFE字符 單行編輯控件或爲0xFFFF 爲多行編輯控件。

另外,從備註部分:

EM_SETLIMITTEXT之前調用,文字的 用戶可以在編輯控制輸入量 默認限制是 32,767個字符。在Windows NT/2000/XP

編輯控件: 對於單行編輯控件, 文本限制或者是0x7FFFFFFE字節 或wParam參數, 取其較小者的值。對於多行 編輯控件,此值爲-1 字節或wParam 參數的值,以較小者爲準。

在Windows 95/98/Me的編輯控制:對於 單行編輯控件,文本 限制或者是0x7FFE字節或wParam參數, 兩者中較小的 值。對於多行 編輯控件,該值爲 0xFFFF字節或wParam參數值爲 ,取其較小值。

我想他們的意思0xFFFFFFFF的,而不是在第二段有-1 ...

2

「(以字符它可以顯示)」!=「嘗試添加一個字符時」。

「嘗試添加字符」==「時用戶可以輸入的最大TCHAR數」 「,除非您的意思是以編程方式嘗試添加字符。

「0x7FFFFFFE characters」!=「0x7FFFFFFE bytes」 有時除外,有時引用MSDN文本可以理解的事實。

我敢打賭,沒有人知道原始問題的答案。但「0x7FFFFFFE字節」可能是許多限制之一。