Здорова ребятки!
Сегодня рассмотрим такой элемент как поле редактирование. Это такой элемент, куда можно вводить строки текста в программку. Он используется в диалоговых окнах для ввода различного текста. И так мы создадим программку простейшую на mfc, вот она откомпилированная должна у вас получиться такая как на скрине ниже
Дальше мы добавим пункт меню в программку обработчик левой кнопки мышки по нажатию которой будет вызываться наш диалог и мы введем текст, который по нажатию на кнопку ОК будет выводится в том месте где мы кликнули кнопкой мышки, в рабочей области программы.
Создаем диалог, для этого идем в Окно ресурсов, кликаем правой клавишей мышки над пунктом Dialog и выбираем вставить диалог
у вас появится новый диалог с идентификатором IDD_DIALOG1
И в рабочей области появится сам диалог
Нарисуем здесь текстовое поле и придадим диалогу вид как на рисунке ниже.
Обход кнопок должен быть таким же как на рисунке, как это сделать? Для этого есть подпункт в меню формат->последовательность перехода
или можете нажать клавишу Ctrl+D.
Выберите наше поле (Edit Control) и в свойствах проекта выберите подпункт «требуется возврат» и установите его в True, это для того чтобы при нажатии на клавише Enter у вас был перевод каретки, а не нажималась кнопка ОК. Так же нужно поставить свойство «Многострочный» в True иначе переводить на другую строку не будет.
Так же добавьте в свойствах «Авто HScroll» False это для того чтобы строка автоматически переносилась по горизонтали и «Прокрутка по вертикали» в True для того чтобы отобразить полосу прокрутки по вертикали
На этом все, мы настроили Edit Control. Можете запустить и посмотреть как выглядит диалоговое окно нажав комбинацию клавиш Ctrl+T и у вас запустится это окошко.
Теперь добавим класс к нашему диалоговому окну, для этого кликните правой клавишей мышки в области диалогового окна и выберите пункт добавить класс
у вас запустится мастер добавления классов приложений, выберите в нем такие настройки как на скрине ниже
Нажмите кнопку готово и у вас создастся новый класс диалогового окна.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#pragma once // диалоговое окно CTextDialog class CTextDialog : public CDialog { DECLARE_DYNAMIC(CTextDialog) public: CTextDialog(CWnd* pParent = NULL); // стандартный конструктор virtual ~CTextDialog(); // Данные диалогового окна enum { IDD = IDD_DIALOG1 }; protected: virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV DECLARE_MESSAGE_MAP() }; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
// TextDialog.cpp: файл реализации // #include "stdafx.h" #include "test1.h" #include "TextDialog.h" #include "afxdialogex.h" // диалоговое окно CTextDialog IMPLEMENT_DYNAMIC(CTextDialog, CDialog) CTextDialog::CTextDialog(CWnd* pParent /*=NULL*/) : CDialog(CTextDialog::IDD, pParent) { } CTextDialog::~CTextDialog() { } void CTextDialog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CTextDialog, CDialog) END_MESSAGE_MAP() // обработчики сообщений CTextDialog |
Дальше добавим переменную член класса для элемента управления IDC_EDIT1, кликнул паровой клавишей мышки в Окне классов и настроив мастер добавления так как на скрине ниже
нажмите кнопку готово и все у вас добавится переменная в класс CTextDialog.
Добавим обработчик в WM_LBUTTONDOWN в классе вида, для этого зайдем в свойства класса и выберем это событие.
у вас создастся пустой обработчик OnLButtonDown, добавим в него следующий код который будет вызывать наше диалоговое окно и рисовать текст.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
void Ctest1View::OnLButtonDown(UINT nFlags, CPoint point) { CTextDialog aDlg;//создаем диалог if(aDlg.DoModal()==IDOK) { CClientDC aDC(this); //вывод по щелчку на клавише ОК, поэтому создать текстовый элемент //получаем размер для текста CSize textExetent=aDC.GetTextExtent(aDlg.m_TextString); CRect rect(point,textExetent);//описывающий прямоугольник //рисуем текст aDC.DrawText(aDlg.m_TextString,rect,DT_CENTER|DT_VCENTER| DT_SINGLELINE|DT_NOCLIP); } CView::OnLButtonDown(nFlags, point); } |
Все запускаем компилируем и мы можем при клике правой клавиши мышки вводить текст и он будет у нас отображаться в виде программы.
Так еще ребятки разберем функцию DrawText контекста устройст
1 2 |
aDC.DrawText(aDlg.m_TextString,rect,DT_CENTER|DT_VCENTER| DT_SINGLELINE|DT_NOCLIP); |
как видим она в качестве третьего параметра принимает константы, что они означают вы можете посмотреть в таблицу
Константы для функции DrawText »
Константа | Назначение |
DT_LEFT | Текст выравнивается по левому краю прямоугольника |
DT_CENTER | Текст центрируется в прямоугольнике горизонтально |
DT_RIGHT | Текст выравнивается по правому краю прямоугольника |
DT_TOP | Текст выравнивается по верху прямоугольника |
DT_VCENTER | Текст центрируется в прямоугольнике вертикально. Используется только с константой DT_SINGLELINE |
DT_BOTTOM | Текст выравнивается по низу прямоугольника. Используется только с константой DT_SINGLELINE |
DT_SINGLELINE | Текст отображается в одной строке. Символы CR и LF игнорируются |
DT_NOCLIP | Запрет выделения текста. Отображается быстрее |
DT_WORDBREAK | Строка разделяется по границам слов, противном случае она выйдет за пределы прямоугольника |
Если что то не понятно, спрашивайте в комментариях разберемся!
[youtube]https://www.youtube.com/watch?v=Uqk5eb5QrR4[/youtube]