我有非常大數量的字符串要加載到MFC組合框。要設置我的組合框的寬度,我爲每個字符串使用GetTextExtent,並在我的組合框上設置最大範圍。這非常耗時,因爲調用GetTextExtent需要花費大量時間。在添加25000個字符串時,這變得非常昂貴。有沒有其他方法可以獲得我可以在組合框上設置的確切寬度?將大量字符串添加到MFC Combobox
回答
方法1:查找最壞的情況下要求
與開始: Which letter of the English alphabet takes up most pixels?
看起來性格W
最寬字符。 (或使用循環查找最寬字符)您可以檢查最大字符串的長度,併爲所有字符填充W
。現在這個字符串的寬度給出了組合框的最壞情況要求,如果它適合你的話。
方法2:保存幾個電話
找到最寬和最寬字符的比例。現在找到最大的字符串的長度。現在做第二次迭代,發現只有字符串長度的字符串的寬度大於largest_length * ratio
。這將節省一些電話。
我用第一種方法,我的客戶對UI不滿意。你能解釋一下方法2是如何工作的嗎? – user273121
假設最寬字符是寬度爲24的「W」,最小寬字符是寬度爲12的寬度。現在假設最大字符串的長度爲50。現在,即使這個最大的字符串是由所有'i'構成的,它將比所有大小爲'25'或更大的字符串佔用更多的空間。即使它們是由所有「W」組成的。這意味着您可以跳過檢查長度爲25或更小的所有字符串的文本寬度。 ('max_len * least_wide_char/widest_char')。 –
有什麼方法可以將調整大小選項設置到組合框的下拉列表中? – user273121
當即將顯示太長的字符串時,您可以動態更新ComboBox的寬度。如果你有25000個職位可以顯示,那麼你會有兩次。另一個提示是使用虛擬ListCtrl - 但只有將所有這些字符串添加到您的組合框太慢。
有沒有什麼方法可以將調整大小選項設置爲組合框的下拉列表? – user273121
@ user273121我不知道我是否理解,但看到這篇文章:https://weseetips.wordpress.com/tag/adjust-combobox-dropdown-width/,你應該使用CComboBox :: SetDroppedWidth – marcinj
嗨,我是已經在使用這個選項。但是爲了設置dropdwon框的寬度,對於性能問題,我不想使用GetTextExtent()方法。所以,如果我爲我的下拉框設置大致的寬度,我想要有可調整大小的抓手,用戶可以將下拉框擴展到所需的大小,就像調整窗口大小一樣。 – user273121
- 1. 將字符串添加到變量powershell
- 2. 將字符串添加到字符串
- 3. 添加字符串MFC組合框
- 4. MFC acombo框中添加字符串
- 5. 將字符添加到字符串
- 6. 將字符添加到字符串
- 7. Python - 將字符添加到字符串
- 8. 將字符添加到字符串
- 9. 將字符添加到JSON字符串
- 10. 將字符添加到字符串vb.net
- 11. Java將字符添加到字符串
- 12. 將字符串變量添加到鏈接列表?
- 13. 將ComboBox字符串複製到TextBox
- 14. 將數字添加到字符串?
- 15. 將數字添加到字符串?
- 16. 基於字符計數將字符串添加到字符串
- 17. MFC Combobox添加A-Z驅動器?
- 18. jQuery的變量添加到字符串
- 19. 新的字符串添加到變量
- 20. 將NSMutableDictionary添加到NSMutableDictionary將字典添加爲字符串
- 21. 將字符串添加到逐字字符串文字
- 22. 將字符串添加到字符串的數字和數字
- 23. 將選擇添加到Combobox
- 24. 將char []添加到char **(字符串到字符串列表)
- 25. 將字符串添加到矢量的矢量
- 26. PHP將$符號添加到字符串中而不是變量?
- 27. 添加到字符串變量(字符串是查詢)
- 28. vb.net字符串concat將vbCrlf文字添加到字符串
- 29. 在MFC中添加字符串的性能下降
- 30. 將字符串屬性添加到CoreDataBooks
我試過Graphics.MesasureString,它也花費了相同的時間。有沒有其他方法? – user273121
問題:我假設您在選擇完成後關注組合框**編輯**部分中字符串的寬度。如果組合框的寬度不夠,您擔心該字符串會被截斷? – rrirower
在25000個元素 - 我會作弊。將GetTextExtent放在一個平均字符上 - 比如'a'並將其乘以最長字符串長度中的字符數。 –