Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT


Метод OnCreate класса CMainFrame


Метод OnCreate класса CMainFrame создает и отображает на экране панели управления и состояния:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

   if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

      return -1;

  

   if (!m_wndToolBar.Create(this)

      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

   {

      // Ошибка создания панели управления

      TRACE0("Failed to create toolbar\n");

      return -1;   

   }



   if (!m_wndStatusBar.Create(this)

      !m_wndStatusBar.SetIndicators(indicators,

        sizeof(indicators)/sizeof(UINT)))

   {

      // Ошибка создания панели состояния

      TRACE0("Failed to create status bar\n");

      return -1;     

   }

   m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |

      CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

   EnableDocking(CBRS_ALIGN_ANY);

   DockControlBar(&m_wndToolBar);

   return 0;

}

Структура indicators, описывающая индикаторы панели состояния, определена в файле MainFrm.h следующим образом:

static UINT indicators[] =

{

   ID_SEPARATOR,

   ID_INDICATOR_CAPS,

   ID_INDICATOR_NUM,

   ID_INDICATOR_SCRL,

};

Сейчас мы не станем подробно останавливаться на процедуре создания панелей состояния и управления. Во первых, в 24 томе мы уже рассматривали метод OnCreate однооконного приложения Single. Он фактически полностью повторяет метод OnCreate приложения Multi. Во вторых мы посвятили проблеме использования меню, панелей состояния и панелей управления отдельный раздел “Меню, панели управления и панели состояния”. Прочитав его, вы полностью поймете как устроен метод OnCreate класса CMainFrame.


Метод OnCreate создает главное окно приложения и отображает в нем панели управления и состояния. Описание метода OnCreate класса CMainFrame вы можете посмотреть в разделе “Приложение Multi”.

Во время добавления компонента Splash Screen метод OnCreate класса CMainFrame модифицируется. К нему добавляется вызов метода ShowSplashScreen класса CSplashWnd.

Метод ShowSplashScreen класса CSplashWnd, который создает и отображает на экране окно заставки, будет описан нами позже:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)

{

   // Вызываем метод OnCreate базового класса

   if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1)

      return -1;

  

   // Создаем панель управления toolbar

   if (!m_wndToolBar.Create(this)

      !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))

   {

      // Ошибка при создании панели управления toolbar

      TRACE0("Failed to create toolbar\n");

      return -1;

   }

   // Создаем панель состояния status bar

   if (!m_wndStatusBar.Create(this)

      !m_wndStatusBar.SetIndicators(indicators,

        sizeof(indicators)/sizeof(UINT)))

   {

      // Ошибка при создании панели состояния status bar

      TRACE0("Failed to create status bar\n");

      return -1;

   }

   // TODO: вы можете изменить характеристики панели

   // управления, убрав некоторые флаги CBRS_

   m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() |

      CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);

   // TODO: вы можете запретить перемещение панели управления,

   // если удалите следующие три строки программы

   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);

   EnableDocking(CBRS_ALIGN_ANY);

   DockControlBar(&m_wndToolBar);

   // CG: The following line was added by the Splash Screen

   // component.

   CSplashWnd::ShowSplashScreen(this);

   return 0;

}




Метод OnCreate класса CMainFrame создает главное окно приложения, и размещает в нем панель управления IDR_MAINFRAME и стандаартную панель состояния.



Содержание раздела