2013-07-18 51 views
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參數,這是有意義的,因此可以很容易地計算總內存量。

如果有人可以澄清這一點,我將不勝感激。

+0

目前還不清楚'nBytes'參數是指每個項目的字節數(即導致分配nItems * nBytes)還是總分配。最終,我不認爲這個或那個方面很重要:組合框將始終在內部做正確的事情,這只是一種優化。但如果您傾向於選擇「這是否有幫助?」下的「否」。鏈接MSDN頁面上,並向Microsoft提交報告。他們*可能*在某些時候更新它。 –

+1

每當我發現MFC文檔不清楚時,我嘗試查找相應的Windows API。在這種情況下(['LB_INITSTORAGE'](http://msdn.microsoft.com/en-us/library/windows/desktop/bb761319.aspx))似乎表明,從Windows NT 4.0開始,此組合框消息不會做任何事情了。 – IInspectable

+2

@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的提示,但我認爲這將在未來非常方便! –

回答