Поэтому я пытаюсь отрезать зубы CPP в существующем приложении.
Я наткнулся на небольшую загадку. Мои элементы списка добавляются в порядке, как вы можете видеть ниже. Тем не менее, выход
[1,10,11,12,13,14,15,2,3,4,5,6,7,8,9]
Я посмотрел на Документация CComboBox здесь. Тем не менее, я все еще не понимаю, почему это приводит к такому результату.
for (int i = 1; i <= m_pPage2->GetNumberColumns(); i++)
{
CString szColNum;
szColNum.Format (_T("%d"), i);
m_cSubColumn.AddString(szColNum);
}
Стандартные функции сравнения плохо работают со строками, содержащими числа. Они не принимают во внимание, что размер строки должен также вступить в игру. При этом, так как «10» начинается с «1», то он будет предшествовать чему-либо, что имеет больше, чем «1» в индексе 0.
Если бы вы заполняли все свое число начальными нулями, чтобы размеры строк были одинаковыми, он сортировал бы их в обычном числовом порядке.
Чтобы остановить CComboBox
от сортировки его содержимого при использовании AddString()
вам нужно установить CBS_SORT
собственность на false
Проблема в том, что ваше поле со списком использует CBS_SORT
стиль, таким образом, данные сортируются с использованием последовательности сортировки ASCII.
Чтобы отключить сортировку, необходимо удалить CBS_SORT
стиль из поля со списком. В зависимости от того, какие инструментальные средства вы используете, этот стиль можно удалить, проверив какой-либо элемент в вашем инструменте, чтобы включить / выключить сортировку, или перейти прямо к самому файлу ресурса и просто удалить CBS_SORT
стиль из определения поля со списком.
В окне «Свойства» для поля со списком убедитесь, что для параметра установлено значение «Ложь». Это позволит вашему комбинированному окну отображать данные так, как вы их вводите.
* Это то, что я делаю в Visual Studio, я не видел, где вы сказали, какую IDE вы использовали.