Здравствуйте, Crach, Вы писали:
C>Получил я список дисков с помощью апи:
C>char buf[256];
C>GetLogicalDriveStrings(256,buf);
C>Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь? Все имена дисков нада загнать в ComboBox. Я конечно подумал прогнать весь массив символов через цикл и нуль символы заменить на какой нибудь символ. Ну и ладно получу я строку дисков разделенную каким нибудь символом. Тут нужна функция вырезки, как я понимаю.
Резать не обязательно — виндовые ф-ции принимают строчки заканчивающиеся нулевым символом, оставшиеся символы за нулевым игнорируются. Поэтому задачу можно упростить до поиска начала следующей строчки.
void populate_combo(HWND combo, const char* strings_begin, const char* strings_end)
{
while(strings_begin < strings_end && *strings_begin)
{
::SendMessage(combo, CB_ADDSTRING, 0, (LPARAM)strings_begin);
strings_begin = std::find(strings_begin, strings_end, '\0');
++strings_begin;
}
}
void f()
{
char buf[256];
::GetLogicalDriveStrings(256,buf);
populate_combo(0, buf, buf + 256);
}
C>Получил я список дисков с помощью апи:
C>char buf[256];
C>GetLogicalDriveStrings(256,buf);
C>Значит в перемнной buf находится список дисков разделенный нуль символами и двумя в конце. В MFC все было просто там был тип CString. А как быть здесь?
Классически это пишется так:
for (const char* str = buf; *str; str += strlen(str) + 1)
MyCooolAlgorithmForStr(str);
... << RSDN@Home 1.1 beta 2 >>