Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Циклическое заполнение ListBox  (Прочитано 14720 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
luden
Участник

ru
Offline Offline

« : 01-08-2012 08:13 » 

Итак, кусок кода

Код:
TCHAR *num;
num = new TCHAR[40];
memset (num, 0, sizeof(num));
num[0] = 48;
for (int i = 0; i < 9; i++)
{
m_listbox.AddString (num);
m_listbox.SetCurSel(Page1->m_data.GetCount() - 1);
num[0]++;
UpdateData (false);
}

На выходе выдаёт столбик девяток, игнорируя UpdateData. Что я делаю не так?
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 01-08-2012 09:28 » 

Код:
num[0]++;
вместо индекса - 0





Добавлено через 4 минуты и 16 секунд:
а зачем массив тут нужен ?

Что мешает сделать так
Код:
for (WCHAR i = _T('0'); i <= _T('9'); i++)
{
m_listbox.AddString (i);
m_listbox.SetCurSel(Page1->m_data.GetCount() - 1);
m_listbox.UpdateWindow();
}
« Последнее редактирование: 01-08-2012 09:39 от Алексей1153++ » Записан

luden
Участник

ru
Offline Offline

« Ответ #2 : 01-08-2012 09:34 » 

Ну да, инкрементирую нулевой элемент. Остальные тридцать девять там для красоты.

Добавлено через 3 минуты и 45 секунд:
Массив это пережитки оригинальной программы. Я просто пытаюсь скомпоновать проблемный код. Мешает сделать так, кстати - cannot convert parameter 1 from 'WCHAR' to 'LPCTSTR'. Но это то фигня, а вот заставить его апдейтится не выходит.
« Последнее редактирование: 01-08-2012 09:38 от luden » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #3 : 01-08-2012 09:39 » 

luden, я подправил с макросом _T()

Добавлено через 1 минуту и 32 секунды:
а вот заставить его апдейтится не выходит.
даже с UpdateWindow()  ?

тогда ещё такой вариант:


Код:
	m_listbox.Invalidate(1);//или 0, если будет моргать
m_listbox.UpdateWindow();


Добавлено через 4 минуты и 14 секунд:
Массив это пережитки оригинальной программы. Я просто пытаюсь скомпоновать проблемный код. Мешает сделать так, кстати - cannot convert parameter 1 from 'WCHAR' to 'LPCTSTR'. Но это то фигня, а вот заставить его апдейтится не выходит.

там не в макросе дело, кстати. Сделай так


Код:
CString txt(i);
m_listbox.AddString(txt);
« Последнее редактирование: 01-08-2012 09:45 от Алексей1153 » Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4 : 01-08-2012 09:46 » 

а ещё вопрос - почему тебе именно во время заполнения надо обновлять ?  По-моему, достаточно после цикла один раз обновить
Записан

luden
Участник

ru
Offline Offline

« Ответ #5 : 01-08-2012 09:55 » 

Потому что заполняю одной и той же переменной. А записывается её последний вариант перед апдейтом.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #6 : 01-08-2012 10:38 » 

Блин, как всё запущено. Жаль Опять 25.

Как работает обновление контрола? Правильно по SetWindowText. А на уровне API? Правильно, по SendMessage. И о чём нам это говорит? Что происходит с очередью сообщений, пока цикл не отработал? Значит надо сделать что?

зы Недавно же только по винтикам разбирали проблему апдейта окна в цикле.
« Последнее редактирование: 01-08-2012 10:40 от Джон » Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #7 : 01-08-2012 10:42 » 

Потому что заполняю одной и той же переменной. А записывается её последний вариант перед апдейтом.
чаво чаво ?
Записан

luden
Участник

ru
Offline Offline

« Ответ #8 : 01-08-2012 10:53 » 

Значит надо сделать что?
Принудительно отправлять сообщения на каждом витке цикла.
зы Недавно же только по винтикам разбирали проблему апдейта окна в цикле.
Поиск не помогает мне найте его.
чаво чаво ?
Недостаточно говорю. Вываливается столбик девяток.
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 01-08-2012 11:01 » 

попробуй
Код:
for (WCHAR i = _T('0'); i <= _T('9'); i++)
{
m_listbox.AddString (CString(i));
}

m_listbox.SetCurSel(0);
//m_listbox.Invalidate(1);
Записан

luden
Участник

ru
Offline Offline

« Ответ #10 : 01-08-2012 11:15 » 

Что-то разваливается и начинает вообще мусор слать. Похоже, что некорректно переводит WCHAR в CString.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #11 : 01-08-2012 11:26 » 

Поиск не помогает мне найте его.

https://forum.shelek.ru/index.php/topic,28774.msg281446.html#msg281446
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #12 : 01-08-2012 11:44 » 

luden, у меня всё ок. Прикрепи проект
Записан

luden
Участник

ru
Offline Offline

« Ответ #13 : 01-08-2012 12:06 » 

Увы, не могу. Ладно, спасибо. Перепишу программу со статиками и таймером.
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #14 : 01-08-2012 12:35 » new

Цитата: luden
Похоже, что некорректно переводит WCHAR в CString.
Разумеется. Нужен CStringW.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 02-08-2012 04:42 » 

в студии CString  выбирает автоматом CStringW или CStringA в зависимости от объявления UNICODE

typedef ATL::CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;



Добавлено через 1 минуту и 34 секунды:
если, конечно, UNICODE правильно вписан в настройках проекта, а не в каком-то файле
« Последнее редактирование: 02-08-2012 04:44 от Алексей1153 » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines