2008-12-04 154 views
0

我有一個MFC對話框上有32 CComboBoxes它在列表框中都有相同的數據。它花了一段時間纔出現,看起來延遲的一部分是我需要花費InsertString()將所有數據添加到32個控件的時間。我如何繼承CComboBox,使32個實例共享相同的數據?多個CComboBox共享相同的數據

+0

中有多少項目您添加到每個組合框的

  • ? – grepsedawk 2008-12-04 22:40:29

  • 回答

    1

    填充組合時關閉窗口重繪。例如:

    m_wndCombo.SetRedraw(FALSE); 
    // Fill combo here 
    ... 
    m_wndCombo.SetRedraw(TRUE); 
    m_wndCombo.Invalidate(); 
    

    這可能有幫助。

    +0

    我認爲你需要確保你在這之後調用Invalidate。 – grepsedawk 2008-12-04 22:50:42

    0

    我會嘗試的第一件事就是調用「InitStorage」爲字符串預先分配內部內存。 從MSDN:

    // 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);

    0

    除了已經取得的說,你也可能會關閉在組合框中預先分類和排序的數據在插入前。

    0

    沿着你的請求的方向之一就是讓所有者繪製 - 你將會寫出一大段代碼,但是你不需要將數據添加到所有的代碼中。 「CComboBox::DrawItem

    Support.microsoft對本文有子類組合框可能也有興趣 「How to subclass CListBox and Cedit inside of CComboBox

    真的要問一下,如果它是值得的,並且那取決於很多之類的東西在列表中

    • 的條目數
    • 次數對話框將顯示
    • 變性融爲一體博內容
    • optomising別處
      • 不拉絲,直至完成整個屏幕的
      • 只有建立對話一次,並重新顯示它。使用一個組合,但顯示它在不同地點不同時間
    相關問題