【发布时间】:2008-12-04 21:37:22
【问题描述】:
我有一个 MFC 对话框,上面有 32 个 CComboBox,它们在列表框中都有相同的数据。它需要一段时间才能出现,看起来延迟的一部分是我需要花费时间使用 InsertString() 将所有数据添加到 32 个控件。如何子类化 CComboBox 以便 32 个实例共享相同的数据?
【问题讨论】:
-
您要向每个组合框添加多少项?
我有一个 MFC 对话框,上面有 32 个 CComboBox,它们在列表框中都有相同的数据。它需要一段时间才能出现,看起来延迟的一部分是我需要花费时间使用 InsertString() 将所有数据添加到 32 个控件。如何子类化 CComboBox 以便 32 个实例共享相同的数据?
【问题讨论】:
填充组合时关闭窗口重绘。例如:
m_wndCombo.SetRedraw(FALSE);
// Fill combo here
...
m_wndCombo.SetRedraw(TRUE);
m_wndCombo.Invalidate();
这可能会有所帮助。
【讨论】:
我会尝试的第一件事是调用“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);
【讨论】:
除了已经说过的内容之外,您还可以在组合框中关闭排序并在插入数据之前对其进行预排序。
【讨论】:
按照您的要求,一种方法是由所有者绘制 - 您将编写相当多的代码,但您不必将数据添加到所有代码中。 "CComboBox::DrawItem"
Support.microsoft 有这篇关于子类化组合框的文章,这可能也很有趣 "How to subclass CListBox and Cedit inside of CComboBox"
真的有人要问是否值得付出努力,而这在很大程度上取决于诸如
之类的事情【讨论】: