Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Ожидание запрос ввода через EditBox


Автор: Kriks 12.8.2010, 02:47
Всем доброго времени суток! Очень нужен совет по решению следующей проблемы. Имеется массив строк, память под который выделяется динамически, необходимо инициализировать данный массив через оконный интерфейс под MFC. Для консольной версии программы решение достаточно просто - создается цикл, на каждой итерации которого происходит запрос ввода определенной строки через gets() или scanf(), при этом каждая следующая итерация цикла не произойдет, до тех пор пока не будет инициализирована строка на предыдущей итерации. В MFC, где уже нет ни gets ни scanf, привязывая функцию цикла к определенной кнопке, по нажатию этой кнопки цикл пробегает все итерации сразу без ожидания запроса ввода строки на каждой итерации как это было в консольном варианте. И в лучшем случае через EditBox удается вбить только одну строку, которая инициализиреут строку на первой итерации цикла, все остальные итерации пройдут без запроса ввода.

Подскажите плиз, есть ли какой-то аналог gets или scanf для MFC, чтобы каждая итерация цикла происходила с ожиданием запроса ввода. Грубо говоря, чтобы при нажатии на кнопку, к которой привязана функция с циклом, она ожидала запроса ввода строки на каждой его итерации через EditBox. Спасибо! 

Автор: 586 12.8.2010, 04:41
Можно использовать многострочный Edit Control, и вводить в него строки, как в обычной программе "Блокнот".

Автор: Earnest 12.8.2010, 07:32
Цитата(Kriks @  12.8.2010,  03:47 Найти цитируемый пост)
Подскажите плиз, есть ли какой-то аналог gets или scanf для MFC, чтобы каждая итерация цикла происходила с ожиданием запроса ввода. Грубо говоря, чтобы при нажатии на кнопку, к которой привязана функция с циклом, она ожидала запроса ввода строки на каждой его итерации через EditBox.

Нет, готовой нет, но никто не мешает нарисовать: в своем наследнике Edit или в PreTranslateMessage родительского окна перехватываешь ENTER, считываешь содержимое EditBox и очищаешь его для приема след. информации. Или, если поле много строчное, считываешь последнюю строку и переводишь каретку (достаточно отдать управление самому контролу).
Но встает вопрос, если смысл симулировать консоль в оконном приложении?. Консоль работает именно так, потому что альтернативы нет, а в оконном-то приложении зачем это надо? Можно заранее набить все строки и ввести их все, можно таймер поставить, и пусть считывает по мере ввода, можно... да много чего можно, нужно только правильно поставить задачу. А оно неясна - построчный ввод не может быть самоцелью ведь.

Автор: Kriks 13.8.2010, 01:58
Народ, здравствуйте! Решил для заполнения массива строк отдельно открывать консоль в своем оконном приложении через AllocConsole(), а далее пользоваться функциями WriteConsole и ReadConsole. Но возникла новая проблема - WriteConsole принимает на вход и выводит только одну строку в отличие к примеру от printf, которая позволяет выводить сразу несколько строк наподобие: printf("%s %s", str, str2). Но если певрую проблему можно решить тем, что для вывода нескольких строк делать поочередно несколько вызовов WriteConsole, то вторая проблема состоит в том, что WriteConsole в конце строки делает переход на новую строку. 

Подскажите плиз, каким образом можно исключить переход на новую строку для WriteConsole или быть может есть аналогичные функции без перехода на новую строку и позволяющие выводить сразу несколько строк как это делает printf.  Спасибо! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)