Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 августа!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Visual C++. MFC
Урок 15. Добавляем обработчик меню

Если вы запустите предыдущий проект, то меню Dialog будет серым:

Серое меню

Так получается потому, что у нашего окна нет обработчика. Добавим его. Для этого внесите с наш код следующие изменения:

CMyMainWnd(){ // конструктор
 
     LoadFrame(IDR_MENU1);
 
 }
 
     //вводим функцию для обработки щелчка по меню
 
     void OnMyMenuDialog();
 
     ...

Затем напишите реализацию этой функции в конце нашего файла:

...
 
 void CMyMainWnd::OnMyMenuDialog(){
 
     AfxMessageBox("Menu!!!"); //Показ MessageBox'а
 
 }

После этого нам надо связать идентификатор нашего меню с написанной выше функцией. Для выяснения, какой идентификатор имеет меню, перйдите на вкладку ResourceView, затем двойным щелчком на меню IDR_MENU1 откройте редактор меню и двойным щелчком на пункте меню Dialog откройте его свойства:

Свойства меню

Отсюда видно, что идентификатор для меню - это ID_MYMENU_DIALOG. Для связывания его с нашей функцией добавьте следующий код:

// начало карты сообщений
 
 BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
 
 //связывание идентификатора с функцией
 
 ON_COMMAND(ID_MYMENU_DIALOG, OnMyMenuDialog)
 
 // конец карты сообщений
 
 END_MESSAGE_MAP()

Этот фрагмент кода можно добавить, скажем, сразу после объявления класса CMyMainWnd (не добавьте его внутрь какого-нибудь класса. Эти строки надо поместить вне классов). Обратите внимание на параметры макроса BEGIN_MESSAGE_MAP. Первый (у нас это CMyMainWnd) показывает, для какого класса мы пишем нашу карту сообщений. Второй (CFrameWnd) указывает родительский класс для нашего класса, т. е. класс, который будет обрабатывать те сообщения, которые не может обработать наш класс CMyMainWnd. Разумеется, если строки

BEGIN_MESSAGE_MAP(CMyMainWnd, CFrameWnd)
 
 ...
 
 END_MESSAGE_MAP()

уже есть, то их второй раз не пишем, а просто добавляем строку

//связывание идентификатора с функцией
 
 ON_COMMAND(ID_MYMENU_DIALOG, OnMyMenuDialog)

между ними.

Тем самым мы ввели карту сообщений для класса CMyMainWnd. Ее еще надо определить в самом классе. Для этого в конце класса CMyMainWnd добавьте строку (если, конечно, ее там уже нет с предыдущих уроков)

    ...
 
     DECLARE_MESSAGE_MAP();
 
 };

Готово! Запускайте программу, выбирайте меню Dialog и любуйтесь на MessageBox:

MessageBox

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS