Помогите с MFC
От: CrazyButcher  
Дата: 31.08.05 15:00
Оценка:
Здравствуйте!
Я никогда раньше не писал программы на С++ под MFC, но мне нужно сделать всего 2 вещи:
1)Скопировать из Edit Control'а IDC_EDIT1 текст в переменную x.

2)Преобразовать переменную типа Int в строку.

3)Добавить преобразованную переменную х в Listbox IDC_LIST1.
Кто знает как это сделать пожалуйста напишите. Заранее благодарен!

31.08.05 19:18: Перенесено модератором из 'C/C++' — Odi$$ey
Re: Помогите с MFC
От: Кодт Россия  
Дата: 31.08.05 15:17
Оценка: 2 (1)
Здравствуйте, CrazyButcher, Вы писали:

CB>Я никогда раньше не писал программы на С++ под MFC, но мне нужно сделать всего 2 вещи:


[ Формулировка задания такая, будто ты лабу сдаёшь. Хотя сегодня 31 августа. ]

CB>1)Скопировать из Edit Control'а IDC_EDIT1 текст в переменную x.

CB>2)Преобразовать переменную типа Int в строку.
CB>3)Добавить преобразованную переменную х в Listbox IDC_LIST1.

Переменная x — это таки целое или строка? Если целое, то зачем конвертировать туда и обратно?

Допустим, что целое.

Итак.
1. Создаёшь в классе диалога (на котором есть упомянутые контролы) переменные, привязанные к контролам
— int m_nEdit1 (он же x)
— CListBox m_lbxList1
Это проще всего сделать визардом в Студии. Class View — Add variable — дальше сам разберёшься, надеюсь.
(У меня под рукой нет VS2003, а в VC6 визард по-другому устроен, поэтому детальные инструкции дать не могу).

2. В том месте, где тебе нужно выполнить эти действия, пишешь
void CYourDialog::DoThisWork()
{
  UpdateData(/*true*/); // скопировать данные из окна в переменные
    // теперь m_nEdit1 содержит числовое значение

  CString str; str.Format("%d", m_nEdit1); // перегоняем его в строку наиболее общим способом.
    // Если применять подобные конструкции не позволяет религия (и правильно делает), изучай сишный itoa или boost::lexical_cast

  m_lbxList1.AddString(str); // добавляем новую строку
    // Возможно, тебе захочется сделать проверку - нет ли уже такой строки в списке?
    // В простейшем случае, проверяй
  if(m_lbxList1.FindStringExact(0,str)!=LB_ERR) MessageBox("This value already exists!");
    // а вообще, это зависит от решаемой задачи
}
Перекуём баги на фичи!
Re[2]: Помогите с MFC
От: CrazyButcher  
Дата: 31.08.05 15:59
Оценка:
Удалено избыточное цитирование. — SchweinDeBurg

Здравствуйте, Кодт, Вы писали:

К>[ Формулировка задания такая, будто ты лабу сдаёшь. Хотя сегодня 31 августа. ]


На счет лабы угадал
А если серьёзно — сделал все как ты сказал, но в мою переменную Х данные не считываются. Похоже UpdateData как-то неправильно работает. Может в визарде категорию переменной поставить Value вместо Control?
Re[3]: Помогите с MFC
От: Кодт Россия  
Дата: 31.08.05 16:08
Оценка:
Здравствуйте, CrazyButcher, Вы писали:

CB>На счет лабы угадал

CB>А если серьёзно — сделал все как ты сказал, но в мою переменную Х данные не считываются. Похоже UpdateData как-то неправильно работает. Может в визарде категорию переменной поставить Value вместо Control?

Если переменная, ассоциированная с Edit'ом — это Control, то как из неё ты читаешь? X.GetWindowText() или ?
А в моём примере это, очевидно, Value
Перекуём баги на фичи!
Re[4]: Помогите с MFC
От: CrazyButcher  
Дата: 31.08.05 16:26
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, CrazyButcher, Вы писали:


CB>>На счет лабы угадал

CB>>А если серьёзно — сделал все как ты сказал, но в мою переменную Х данные не считываются. Похоже UpdateData как-то неправильно работает. Может в визарде категорию переменной поставить Value вместо Control?

К>Если переменная, ассоциированная с Edit'ом — это Control, то как из неё ты читаешь? X.GetWindowText() или ?

К>А в моём примере это, очевидно, Value

После отладки понял в чем глюк. Конструкция CString str; str.Format("%d", EnterX); не работает. Переменная str выводит вместо значения переменной EnterX число вроде 571281276 и всегда одно и тоже.
Re[5]: Помогите с MFC
От: CrazyButcher  
Дата: 31.08.05 17:24
Оценка:
Всё. Разобрался. Всё работает. Огромное спасибо за помощь! Теперь я здам программирование за прошлый год!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.