www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
  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 , окно и не всегда можно уничтожить, помните это и обрабатывайте, если необходимо. Правило - внутри пустой функции важно содержание!

Программа реагирует на нажатие меню, как я на запах кофе!


Шпаргалка

  1. Добавляем функцию, которая обработает вызов меню, в класс рамки окна
    class CMainWnd : public CFrameWnd
    {
    public:
    ......
    void MenuExit();
    ..... 
    };
    
  2. Создаем её обработку в обработчике событий класса рамки окна
       BEGIN_MESSAGE_MAP(CMainWnd, CFrameWnd)	
    	.......
    	ON_COMMAND(ID_EXIT,MenuExit)      
    	........
       END_MESSAGE_MAP()
    
  3. Пишем, что делать
    void CMainWnd::MenuExit()
    {
       ..............	 
    }
    

Предыдущий Шаг | Следующий Шаг | Оглавление

By Artem.
Используются технологии uCoz
 

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

Используются технологии uCoz