#c #visual-c #mfc
#c #visual-c #mfc
Вопрос:
У меня есть устаревший проект, в котором мне нужно добавить многострочное текстовое поле в представление.
Сначала я просто хочу создать текстовое поле в функции onDraw в моем классе view, чтобы вывести текстовое поле на экран. Прямоугольник текстового поля продолжает мигать. Я не могу его выбрать или что-либо сделать.
Класс view унаследован от CView. Информация. из исследования я узнал, что CEdit обычно добавляется в класс dialog, но я все еще могу добавить его в любое представление.
CRect rect(100, 100, 300, 200);
CEdit test;
test.Create(WS_CHILD | WS_VISIBLE | WS_BORDER | WS_HSCROLL | ES_MULTILINE | WS_VSCROLL,
rect, this, 1);
Я совершенно новичок в этом, и прежде чем я перейду ко всем процедурам обработки и обмена сообщениями, я просто хочу создать текстовое поле и ввести в него некоторый текст.
Заранее благодарю вас за помощь.
Комментарии:
1. Кажется, вы создали
test
локальную переменную. Если это так, то он уничтожается, как только функция возвращается, и получает фактическое управление вместе с ним.2. Вам нужно показать больше кода, но предыдущий комментарий, вероятно, является частью ответа. Попробуйте создать
test
член вашего (CView
производного?) класс. Я не уверен, чтоOnDraw
это правильная функция, в которой должен быть созданCEdit
элемент управления.3. @IgorTandetnik Большое вам спасибо, он отлично работает после того, как я разместил его в куче.
Ответ №1:
Вероятно, вы не хотите создавать элемент управления edit в вашем onDraw. Фактически, если ваше представление не содержит чего-то еще, что вам нужно нарисовать, вам может вообще не понадобиться обрабатывать onDraw.
Когда у вас есть представление, в котором размещен элемент управления, вы обычно хотите создать этот элемент управления в onCreate представления, поэтому он создается после создания собственного окна представления (которое будет родительским элементом управления), но до отображения окна представления (чтобы элемент управления мог отображаться одновременно).
В этом случае представлению, вероятно, вообще не нужно будет иметь дело с рисованием. Вероятно, потребуется разобраться с:
- изменение размера: измените размер элемента управления в соответствии с новым размером клиентской области представления.
- фокус: когда представление получает фокус, немедленно переключите фокус на элемент управления.
- Команды: вы довольно часто хотите иметь дело с такими вещами, как:
- вырезать / скопировать / вставить в / из элемента управления
- поместите данные в элемент управления (например, из файла)
- вывод данных из-под контроля (например, сохранение в файл)
- установите шрифт элемента управления
Комментарии:
1. Спасибо. Представление, с которым я работаю, рисует другие вещи, например, отмечает круг в текущем окне. Я хочу сначала протестировать простое текстовое поле, прежде чем двигаться дальше. Моя конечная цель — использовать мышь для выделения / указания области (в представлении клиента), и эта новая область будет текстовым полем. Он должен обрабатывать некоторое взаимодействие пользователя с документом. Спасибо за все советы.