2
我有一個組合框,我需要填充潛在的大量項目,我已經查看了MSDN MFC文檔CComboBox
,並且我找到了InitStorage
成員函數,其中包含以下內容原型:MFC CComboBox :: InitStorage文檔說明
int CComboBox::InitStorage(int nItems, UINT nBytes);
的參數被列爲:
NITEMS:指定商品添加的數量。
nBytes:指定分配給項目字符串的內存量(以字節爲單位)。
這聽起來像您指定的nBytes
參數的內存總量。然而,例如他們給的衝突與此:
// The pointer to my combo box.
extern CComboBox* pmyComboBox;
// Initialize the storage of the combo box to be 256 strings with
// about 10 characters per string, performance improvement.
int n = pmyComboBox->InitStorage(256, 10);
ASSERT(n != CB_ERRSPACE);
// Add 256 items to the combo box.
CString str;
for (int i=0;i < 256;i++)
{
str.Format(_T("item string %d"), i);
pmyComboBox->AddString(str);
}
這個例子表明,nBytes
參數實際上是保留每串,而不是總字節數。考慮到有一個nItems
參數,這是有意義的,因此可以很容易地計算總內存量。
如果有人可以澄清這一點,我將不勝感激。
目前還不清楚'nBytes'參數是指每個項目的字節數(即導致分配nItems * nBytes)還是總分配。最終,我不認爲這個或那個方面很重要:組合框將始終在內部做正確的事情,這只是一種優化。但如果您傾向於選擇「這是否有幫助?」下的「否」。鏈接MSDN頁面上,並向Microsoft提交報告。他們*可能*在某些時候更新它。 –
每當我發現MFC文檔不清楚時,我嘗試查找相應的Windows API。在這種情況下(['LB_INITSTORAGE'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb761319.aspx))似乎表明,從Windows NT 4.0開始,此組合框消息不會做任何事情了。 – IInspectable
@Tim MSDN ['CB_INITSTORAGE'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb775872(v = vs.85).aspx)頁面似乎表明,儘管它不會不會爲Windows NT 4.0執行功能,它實際上可以做到Windows 2000/XP的預期功能(也可能是後來的版本)。感謝提供關於查找各自的Windows API的提示,但我認爲這將在未來非常方便! –