Шаг 5 - Создание панели состояния

www.adept7.kiev.ua
| Форум| Гостевая| Ссылки| Программы| Исходные тексты| Наши партнеры.|
   
| Главная| Рассылки| Услуги| Библиотека| Новости| Авторам| Программистам| Студентам|
delphi c++ assembler
 

Создание проекта

Step1 нам подходит. Внесём изменения. В предыдущих шагах все понятно, сосредоточимся на главном. Вот сейчас создание панели станет очень похожей на результаты волшебника !

Создаем код

В описания включаемых файлов добавим
  #include <afxext.h> // MFC Расширения
В описания класса рамки окна
  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); 
           // эта функция вызывается при создании окна
  private:
    CStatusBar m_wndStatusBar; // Панель состояния
    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() // событие создания окна
   END_MESSAGE_MAP()
Описание объявленной процедуры
 int CMainWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
 {
  if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
  return -1;
  m_wndStatusBar.Create(this); 
  return 0;
 }

Описание

Для создания панели состояния нам естественно нужен MFC класс. В afxwin.h его нет. Но зато он есть в afxrxt.h. Его и надо включить.

Следующим шагом этот класс мы и включаем в класс окна. Заметьте он включен статически. То есть при создании объекта окна автоматически создастся класс панели состояния и он будет жить пока живет объект рамки окна. Это и нужно. Хотя можно и динамически.

Определили функцию OnCreate. Эта функция при соблюдении условия (смотри ниже) вызывается при создании окна. Но она не виртуальная и код этой функции нужен и нам. Вывод вы можете переопределить любой метод (функция) класса. Вот!.

Определяем реакцию на событие создания окна. Это нужно делать обязательно во многих случаях. Если этого не сделать функция не выполнится никогда. Это важно. Очень. Если вы переопределяете метод (функцию) класса и ничего не происходит проверьте, а нет ли необходимого сообщения для работы этой функции. Например OnPaint требует ON_WM_PAINT иначе на экране ничего не будет. Как правило, многие методы требуют определения реакции на соответствующее сообщение.

И наконец пишем саму функцию. Результат работы этой функции число, если -1, то окно не созданно. И код реализации окна нам нужен, поэтому и был вызван метод папы в этой функции. CFrameWnd::OnCreate. На параметры не обращайте пока внимание, не в этом суть. Правило - переобределил метод, вызови метод папы Папа::Метод и делай дальше, что хочешь.

Код дальше вызывает метод класса Панель состояния по её созданию. С параметром куда вставлять - сюда, в рамку окна.

Как обычно и запуск. Панель есть внизу, как настоящая, но пока пустая. Всё пора пить кофе.


Шпаргалка

  1. Включаем библиотеку расширений MFC.
       #include <afxext.h> 
    
  2. В класс рамки окна добавляем процедуры создания и описание класса панели состояния
       int OnCreate(LPCREATESTRUCT lpCreateStruct); 
       CStatusBar m_wndStatusBar;
    
  3. Добавить в таблицу откликов реакцию на создание окна
       ON_WM_CREATE() 
    
  4. Описать процедуру создания окна и добавить создание панели состояния.
       m_wndStatusBar.Create(this); 
    

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

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

Rambler's Top100 Rambler's Top100

©  Adept Design Studio

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