|
http://tikitak.narod.ru ---- Главная страница сайта
Шаг 7 - Обработка команд меню
Создание проекта
Мучаем Step1. К моменту начала ваш проект должен иметь меню, и пункт меню Exit должен быть серым. Есть песня со словами "был-бы серым, но кто-то взял и покрыл меня сажей". Или в этом роде, не в этом суть, суть в процессе. Меню серое, а пока серое стучи не стучи толку нет. Вот мы и будет делать его черным.
Создаем код
Добавляем функцию к классу рамки окна для обрабоки команд на неё мы укажем в обработчике событий. Она должна быть void и без параметров.
class CMainWnd : public CFrameWnd
{
public:
CMainWnd();
afx_msg void OnLButtonDblClk( UINT, CPoint );
afx_msg void OnRButtonDblClk( UINT, CPoint );
afx_msg void OnKeyDown( UINT, UINT, UINT );
int OnCreate(LPCREATESTRUCT lpCreateStruct);
void MenuExit(); // Процедура реакции на нажатие кнопки
private:
CStatusBar m_wndStatusBar;
CMenu m_wndMenu;
CStatic* MyStatic;
CMyButton* MyButton;
CEdit* MyEdit;
DECLARE_MESSAGE_MAP();
};
А теперь в обработчике событий реакцию на выбор пункта меню
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
ON_WM_LBUTTONDBLCLK()
ON_WM_RBUTTONDBLCLK()
ON_WM_KEYDOWN()
ON_WM_CREATE()
ON_COMMAND(ID_EXIT,MenuExit)
// Вот она , обрабока реакции на выбор меню !
END_MESSAGE_MAP()
И сама функция обработки ( вообще это процедура, так как не возвращает значение ), но вроде в С++ всё функции ? Её можно поместить сразу после обработки сообщений.
void CMainWnd::MenuExit()
{
DestroyWindow(); // Уничтожить окно
}
Описание
В классе необходимо описать функцию реакции. Просмотрите предыдущие обработки. Не перепутайте. Объявляете функцию в классе, в котором и будут обрабатывать, и в которой есть обработчик.
Макро ON_COMMAND предназначен для обработки команд вашего меню. В параметры ставите идентификатор, а вторым имя Функции. Функция должна иметь тип VOID , что значит пусто и она не вернет параметры. После Паскаля это удивительно. Что это за функция, которая не возврашает параметры. Это процедура !! Ну это на совести С++. То, что она тип VOID логично - куда возвращать результат, в меню что-ли ? И без параметров она, откуда им взяться ? Правило - функция реакции на меню с виду пустая, как бубен.
Функция DestroyWindow() разрушает окно. При этом тип у неё BOOL , окно и не всегда можно уничтожить, помните это и обрабатывайте, если необходимо. Правило - внутри пустой функции важно содержание!
Программа реагирует на нажатие меню, как я на запах кофе!
Шпаргалка
- Добавляем функцию, которая обработает вызов меню, в класс рамки окна
class CMainWnd : public CFrameWnd
{
public:
......
void MenuExit();
.....
};
- Создаем её обработку в обработчике событий класса рамки окна
BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)
.......
ON_COMMAND(ID_EXIT,MenuExit)
........
END_MESSAGE_MAP()
- Пишем, что делать
void CMainWnd::MenuExit()
{
..............
}
Предыдущий Шаг | Следующий Шаг | Оглавление
By Artem.
Используются технологии uCoz
|