C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




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

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