![]() |
|
|
![]()
|
|
| Kriks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.8.2010 Репутация: нет Всего: нет |
Всем доброго времени суток! Очень нужен совет по решению следующей проблемы. Имеется массив строк, память под который выделяется динамически, необходимо инициализировать данный массив через оконный интерфейс под MFC. Для консольной версии программы решение достаточно просто - создается цикл, на каждой итерации которого происходит запрос ввода определенной строки через gets() или scanf(), при этом каждая следующая итерация цикла не произойдет, до тех пор пока не будет инициализирована строка на предыдущей итерации. В MFC, где уже нет ни gets ни scanf, привязывая функцию цикла к определенной кнопке, по нажатию этой кнопки цикл пробегает все итерации сразу без ожидания запроса ввода строки на каждой итерации как это было в консольном варианте. И в лучшем случае через EditBox удается вбить только одну строку, которая инициализиреут строку на первой итерации цикла, все остальные итерации пройдут без запроса ввода.
Подскажите плиз, есть ли какой-то аналог gets или scanf для MFC, чтобы каждая итерация цикла происходила с ожиданием запроса ввода. Грубо говоря, чтобы при нажатии на кнопку, к которой привязана функция с циклом, она ожидала запроса ввода строки на каждой его итерации через EditBox. Спасибо! |
|||
|
||||
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 6 Всего: 146 |
Можно использовать многострочный Edit Control, и вводить в него строки, как в обычной программе "Блокнот".
|
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Нет, готовой нет, но никто не мешает нарисовать: в своем наследнике Edit или в PreTranslateMessage родительского окна перехватываешь ENTER, считываешь содержимое EditBox и очищаешь его для приема след. информации. Или, если поле много строчное, считываешь последнюю строку и переводишь каретку (достаточно отдать управление самому контролу). Но встает вопрос, если смысл симулировать консоль в оконном приложении?. Консоль работает именно так, потому что альтернативы нет, а в оконном-то приложении зачем это надо? Можно заранее набить все строки и ввести их все, можно таймер поставить, и пусть считывает по мере ввода, можно... да много чего можно, нужно только правильно поставить задачу. А оно неясна - построчный ввод не может быть самоцелью ведь. -------------------- ... |
|||
|
||||
| Kriks |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 12.8.2010 Репутация: нет Всего: нет |
Народ, здравствуйте! Решил для заполнения массива строк отдельно открывать консоль в своем оконном приложении через AllocConsole(), а далее пользоваться функциями WriteConsole и ReadConsole. Но возникла новая проблема - WriteConsole принимает на вход и выводит только одну строку в отличие к примеру от printf, которая позволяет выводить сразу несколько строк наподобие: printf("%s %s", str, str2). Но если певрую проблему можно решить тем, что для вывода нескольких строк делать поочередно несколько вызовов WriteConsole, то вторая проблема состоит в том, что WriteConsole в конце строки делает переход на новую строку.
Подскажите плиз, каким образом можно исключить переход на новую строку для WriteConsole или быть может есть аналогичные функции без перехода на новую строку и позволяющие выводить сразу несколько строк как это делает printf. Спасибо! |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |