несколько CComboBox, совместно использующих одни и те же данные - PullRequest
0 голосов
/ 05 декабря 2008

У меня есть диалоговое окно MFC с 32 CComboBox, которые все имеют одинаковые данные в списке. Это займет некоторое время, и похоже, что часть задержки - это время, которое мне нужно потратить, используя InsertString () для добавления всех данных в 32 элемента управления. Как я могу создать подкласс CComboBox, чтобы 32 экземпляра совместно использовали одни и те же данные?

Ответы [ 4 ]

1 голос
/ 05 декабря 2008

Отключить перерисовку окна при заполнении комбо. e.g.:

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

Это может помочь.

0 голосов
/ 05 декабря 2008

Один из способов, согласно которому ваш запрос будет состоять в том, чтобы получить информацию о владельце - вы будете писать довольно много кода, но вам не нужно будет добавлять данные ко всем из них. " CComboBox :: DrawItem "

Support.microsoft опубликовал эту статью о создании подкласса поля со списком, который также может представлять интерес " Как создать подкласс CListBox и Cedit внутри CComboBox "

На самом деле нужно спросить, стоит ли это усилий, и многое зависит от таких вещей, как

  • количество записей в списке
  • количество раз, которое диалоговое окно покажет
  • изменчивость комбо-контента
  • в других местах
    • не рисует, пока экран не завершится
    • только один раз строит диалог и снова его показывает.
    • с использованием одного комбо, но в разное время показывая его в разных местах
0 голосов
/ 05 декабря 2008

В дополнение к тому, что уже было сказано, вы также можете отключить сортировку в поле со списком и предварительно отсортировать данные перед их вставкой.

0 голосов
/ 05 декабря 2008

Первое, что я бы попробовал, это вызвать InitStorage, чтобы предварительно выделить внутреннюю память для строк. Из MSDN:

// Initialize the storage of the combo box to be 256 strings with // about 10 characters per string, performance improvement.</p> <p>int n = pmyComboBox->InitStorage(256, 10);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...