Kselax.ru

Hacker Kselax — the best hacker in the world

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

MFC — создание меню и панелей инструментов

Posted on 22 сентября, 201425 сентября, 2014 by admin

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

Сегодня мы разсмотрим как создается меню и панели инструментов в mfc. Я главу прочитал в которой было описано как это делается и решил написать статью-шпору, что б было куда подсмотреть если вдруг понадобится.

И так приступим, запускаем visual studio 2010 и выбираем Файл->Создать->ПроектQIP Shot - Screen 193появится окошко создать меню

создать проект

выбираем mfc и приложение mfc, вводим имя menu и нажимаем кнопку ok и мы попадаем в мастер приложений MFC

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

тип приложенияЗдесь можно выбрать какое тип приложения мы хотим создать: одно документное или несколько документное или на основании диалогового окна. На основании диалогового окна — это самый простой тип приложения считается. Мы выбрали несколько документный, это не сильно важно, можно б выбрать и одноднодокументный. В общем делаем настройки такие как на скрине выше и нажимаем далее, я нихо за все настройки говорить, потому что ну очень много нужно расказать за каждую настройку, будем пологать что вы уже знаете их и лучше поэкспериментировать сними

свойство шаблона документаПосле нажатия на кнопку далее мы попадаем на вкладку Поддержка составных документовПоддержка составный документовздесь ничего не меняем и ждем Далее, переходим к пункту свойство шаблона документасвойство шаблона документаздесь вводим расширение файла men и жмем далее без точки и мы попадаем в окошко Поддержка баз данныхПоддержка базы данныхничего не изменяем, жмем далее, попадаем в свойства интерфейса пользователясвойства интерфейса пользователяничего не меняем жмем далее, попадем в дополнительные параметрыдополнительные параметрытак же ничего не меняем, жмем далее и попадаем в созданные классысозданные классынажимаем готово и у нас создался шаблон пустой mfc приложения.

Нажимаем CTL+F5 и получаем программу что создал мастер mfcпрограммаМастер MFC создал стандартные пункты меню, и всякую хрень, а мы сейчас добавим к этим стандартным пунктам меню свои два пункта Element иColor , заходим в Окно ресурсов клацаем по папке Menu выбираем из списка IDR_menuTYPE и по нему два раза кликаем мышкой и мы попадаем в визуальный редактор, где можно редактировать менюокно ресурсовкликаем мышкой по текстовому полю в котром написано прототип для текста и вводим E&element и C&olor значек амперсанда означает что буква e и о будут активны при выборе пунктов меню. Вводим также подпункт для пункта меню элемент &Line, &Rectangle, &Circle, C&urve , а для Color подпункты &Black, &Red, &Green, B&lue.цветВсе менюшку мы создали, компилируем программу Ctl+F5программаКак видно пункты меню не активны так как мы не добавили функции-обработчики событий для этих элементов. Добавим функции обработчики событий для каждого элемента, для этого в редакторе меню ресурсов кликнем правой клавишей мыши над пунктом Line и в раскрывшемся контекстном меню выберем пункт Добавить обработчик событий обработчик событийи мы попадаем в мастер обработчика событий мастер обработчика событийздесь тип сообщения COMMAND, имя функции само сгенерировалось, мы можем его изменить, и выбираем класс к которому будет добавленя функция-обработчик события, я выбрал класс СmenuDoc. Нажимаем кнопку Добавить/править и мы переносимся в созданную функцию OnElementLine, создадим такие функции обработчики для все остальных пунктов меню. У вас должно появится в файле menuDoc.cpp 8 новых функций. Добавим в функцию OnElementLine код:

1
2
3
4
void CmenuDoc::OnElementLine()
{
AfxMessageBox(_T("Line"));
}

и скомпилируем программу Ctl+F5 и у нас уже активны пункты менюпрограмма кликнем по пункту Line и у нас вызовется функция AfxMessageBox();AfxMessageBoxпо другим пунктам меню когда мы нажимаем  у нас ничего не происходит, так как функции обработчик событий этих пунктов меню пустые, мы специально добавили только в одну функцию обработчик, что б было понятно что вызываются функции.

Создадим заголовочный файл ConstantsMenu.h  и добавим в него следующий код:

1
2
3
4
5
6
7
8
9
10
11
//глобальные переменные
#pragma once
 
//перечисление
enum ElementType{LINE,RECTANGLE,CIRCLE,CUVE};
 
//константы
const COLORREF BLACK=RGB(0,0,0);
const COLORREF RED=RGB(255,0,0);
const COLORREF GREEN=RGB(0,255,0);
const COLORREF BLUE=RGB(0,0,255);

и подключаем этот файл в файле menu.h

подключение

это перечисление ElementType для пунктов меню Element и константы цветов для пунктов меню Color. Добавим в класс CmenuDoc две переменные ElementType elementType и COLORREF color. Добавитьв окне классов кликаем правой клавишей мышки над классом CmenuDoc и в контекстном меню выбираем Добавить->Добавить переменную и у вас появится окошко мастера добавления переменноймастер добавления переменнойЗаполняем поля данными и нажимаем Готово, так же добавляем переменную color. Все переменные добавлены в класс CmenuDoc, можете даже проверить в заголовочном файлекодДальше нужно в каждую функцию обработчик событий добавить следующий код для обработчиков пунктов меню Element вставить elelentType=LINE, elementType=RECTANGLE, elementType=CIRCLE, elementType=CURVE в каждый обработчик по записи, что б при вызове обработчика для пункта Rectangle elementType имел бы значение RECTANGLE и т.д. Ну и для цветов добавляем в обработчики следующие строки соответственно color=BLACK, color=RED, color=GREEN, color=BLUE

код

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
35
36
37
38
39
40
41
42
43
44
45
46
void CmenuDoc::OnElementLine()
{
elementType=LINE;
}
 
 
void CmenuDoc::OnElementRectangle()
{
elementType=RECTANGLE;
}
 
 
void CmenuDoc::OnElementCircle()
{
elementType=CIRCLE;
}
 
 
void CmenuDoc::OnElementCurve()
{
elementType=CURVE;
}
 
 
void CmenuDoc::OnColorBlack()
{
color=BLACK;
}
 
 
void CmenuDoc::OnColorRed()
{
color=RED;
}
 
 
void CmenuDoc::OnColorGreen()
{
color=GREEN;
}
 
 
void CmenuDoc::OnColorBlue()
{
color=BLUE;
}

и так после того как мы добавили обработчики давайте добавим обработчики которые будут обновлять пункты меню и будут ставить галочки напротив выбранного пункта снова выбираем обработчик событийобработчик событийпопадаем в мастер создания событиямастер создания событиятолько здесь уже для класса CmenuDoc создаем обработчики события типа UPDATE_COMMAND_UI, нажимаем кнопку Добавить/править и мы переносимся в этот же обработчик и такие обработчики создаем для все 8 пунктов новых меню 4 для Element и 4 для Color

Дальше в эти обработчики нужно добавить код:

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
35
36
37
38
39
40
41
42
43
44
45
46
void CmenuDoc::OnUpdateElementLine(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(elementType==LINE);
}
 
 
void CmenuDoc::OnUpdateElementRectangle(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(elementType==RECTANGLE);
}
 
 
void CmenuDoc::OnUpdateElementCircle(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(elementType==CIRCLE);
}
 
 
void CmenuDoc::OnUpdateElementCurve(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(elementType==CURVE);
}
 
 
void CmenuDoc::OnUpdateColorBlack(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(color==BLACK);
}
 
 
void CmenuDoc::OnUpdateColorRed(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(color==RED);
}
 
 
void CmenuDoc::OnUpdateColorGreen(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(color==GREEN);
}
 
 
void CmenuDoc::OnUpdateColorBlue(CCmdUI *pCmdUI)
{
pCmdUI->SetCheck(color==BLUE);
}

Нам так же нужно сделать инициализацию переменных elementType и color в конструкторе класса CmenuDoc

1
2
3
4
5
6
7
CmenuDoc::CmenuDoc()
:elementType(LINE)
,color(BLACK)
{
// TODO: добавьте код для одноразового вызова конструктора
 
}

Компилируем программу и проверяем что у нас получилось!

И от какая программа у нас получиласьпрограмманапротив выбранного пункта меню появляются галочки. Нам осталось создать теперь панель инструментов и так приступим, заходим в окно ресурсов, выбираем папку Toolbar и пункт IDR_MAINFRAME_256 кликаем по нему два раза мышкой и мы попадаем в окно для создания панели инструментовокно ресурсовТут уже в редакторе перемещаем кнопку на половину вправо, что б получился отступотступи рисуем линию в самой рабочей области и айди меняем на уже существующий айди для пункта менюсмена айдиВсе такие действия проделываем для всех остальных 7 кнопок соответствующих пунктам меню Element и Color. У вас должна получиться такая от панелькапанельвсе компилируем и смотрим что у нас получилось. У нас получилась программка в которой есть панель инструментов и в которой при нажатии на кнопке панели инструментов меняется и пункт меню и они оба выделяются

программаМожно так же добавить всплывающие подсказки, для этого нам нужно редактировать например для элемента меню Line у которого id=ID_ELEMENT_LINE

свойствамы изменяем свойство Приглашение на line draw\nline line будет как заглавие всплывающей подсказки, а line draw будет текст после

всплывающая подсказкаа в строке состояния отобразится только line draw

строка состоянияну и все ребятки на это все, программа у нас работает, меню работает, все короче работает. От так просто и легко в MFC делается меню.

[youtube]https://www.youtube.com/watch?v=fMTKARu2mkQ[/youtube]

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

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

Рубрики

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

Метки

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 Двоичное дерево Задачи С++ Игры С++ Исключения С++ О-большое Операторы_С++ Перегрузка операторов С++ Поиск С++ Потоки Проектирование_С++ С++ Типы_С++ Типы С++ Шаблоны С++ библиотеки локализация макросы С++ сортировка С++

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

  • RA3PKJ к записи visual C++, создание диалоговых окон.
  • admin к записи Как удалить изображение из google
  • Shakanris к записи Программка для заполнения форума на vBulletin 3.8.7
  • костя к записи visual C++, создание диалоговых окон.
  • Татьяна к записи Как удалить изображение из google
©2021 Kselax.ru Theme by ThemeGiant