MFC CEdit не принимает ввод с клавиатуры

#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. изменение размера: измените размер элемента управления в соответствии с новым размером клиентской области представления.
  2. фокус: когда представление получает фокус, немедленно переключите фокус на элемент управления.
  3. Команды: вы довольно часто хотите иметь дело с такими вещами, как:
    • вырезать / скопировать / вставить в / из элемента управления
    • поместите данные в элемент управления (например, из файла)
    • вывод данных из-под контроля (например, сохранение в файл)
    • установите шрифт элемента управления

Комментарии:

1. Спасибо. Представление, с которым я работаю, рисует другие вещи, например, отмечает круг в текущем окне. Я хочу сначала протестировать простое текстовое поле, прежде чем двигаться дальше. Моя конечная цель — использовать мышь для выделения / указания области (в представлении клиента), и эта новая область будет текстовым полем. Он должен обрабатывать некоторое взаимодействие пользователя с документом. Спасибо за все советы.