Kselax.ru

Hacker Kselax — the best hacker in the world

Menu
  • Блог
  • Контакты
  • wp plugin генератор
  • Русский
    • Русский
    • English
Menu

MFC — Использование элемента «Поле редактирование» Edit Control

Posted on 12 декабря, 201413 декабря, 2014 by admin

Здорова ребятки!

Сегодня рассмотрим такой элемент как поле редактирование. Это такой элемент, куда можно вводить строки текста в программку. Он используется в диалоговых окнах для ввода различного текста. И так мы создадим программку простейшую на mfc, вот она откомпилированная должна у вас получиться такая как на скрине ниже

MFC edit boxДальше мы добавим пункт меню в программку обработчик левой кнопки мышки по нажатию которой будет вызываться наш диалог и мы введем текст, который по нажатию на кнопку ОК будет выводится в том месте где мы кликнули кнопкой мышки, в рабочей области программы.

Создаем диалог, для этого идем в Окно ресурсов, кликаем правой клавишей мышки над пунктом Dialog и выбираем вставить диалог

MFC insert Dialogу вас появится новый диалог с идентификатором IDD_DIALOG1

mfc dialogИ в рабочей области появится сам диалог

MFC dialog1Нарисуем здесь текстовое поле и придадим диалогу вид как на рисунке ниже.

mfc dialog3Обход кнопок должен быть таким же как на рисунке, как это сделать? Для этого есть подпункт в меню формат->последовательность перехода

mfc formatили можете нажать клавишу Ctrl+D.

Выберите наше поле (Edit Control) и в свойствах проекта выберите подпункт «требуется возврат» и установите его в True, это для того чтобы при нажатии на клавише Enter у вас был перевод каретки, а не нажималась кнопка ОК. Так же нужно поставить свойство «Многострочный» в True иначе переводить на другую строку не будет.

mfc true1

 

Так же добавьте в свойствах «Авто HScroll» False это для того чтобы строка автоматически переносилась по горизонтали и «Прокрутка по вертикали» в True для того чтобы отобразить полосу прокрутки по вертикали

mfc prokrytka

На этом все, мы настроили Edit Control. Можете запустить и посмотреть как выглядит диалоговое окно нажав комбинацию клавиш Ctrl+T и у вас запустится это окошко.

Теперь добавим класс к нашему диалоговому окну, для этого кликните правой клавишей мышки в области диалогового окна и выберите пункт добавить класс

mfc add classу вас запустится мастер добавления классов приложений, выберите в нем такие настройки как на скрине ниже

mfc add class wizordНажмите кнопку готово и у вас создастся новый класс диалогового окна.

TextDialog.h »

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()
};

TextDialog.cpp »

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, кликнул паровой клавишей мышки в Окне классов и настроив мастер добавления так как на скрине ниже

mfc add variableнажмите кнопку готово и все у вас добавится переменная в класс CTextDialog.

Добавим обработчик в WM_LBUTTONDOWN в классе вида, для этого зайдем в свойства класса и выберем это событие.

mfc add onLmouseButtonу вас создастся пустой обработчик 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);
}

Все запускаем компилируем и мы можем при клике правой клавиши мышки вводить текст и он будет у нас отображаться в виде программы.

 

mfc hellow worldТак еще ребятки разберем функцию 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]

 

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • C++ (293)
  • JavaScript (1)
  • linux (1)
  • MFC (39)
  • node.js (2)
  • React (3)
  • uncategorized (3)
  • vBulletin (5)
  • Visual Studio (9)
  • wordpress (18)
  • Разное (121)

Метки

Ajax bootstrap CentOS CLI expressjs FormData GDlib google Invisible reCAPTCHA JWT media MFC php react-router-dom redux repository wordpress RTTI STL vBulletin vector Visual Studio WINAPI wordpress wp-plugins XMLHttpRequest Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

Свежие комментарии

  • Proffirot к записи Программка для заполнения форума на vBulletin 3.8.7
  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • JasonReant к записи Создание и использование статических библиотек .lib в visual studio.
  • MyWin2020 к записи Программка для заполнения форума на vBulletin 3.8.7
  • ScottJip к записи Создание и использование статических библиотек .lib в visual studio.
©2021 Kselax.ru Theme by ThemeGiant