//============================================================
// Приложение DialogBar
// (c) Frolov G.V., 1996
// E-mail: frolov@glas.apc.org
//============================================================
// Исключаем редко используемые определения из 
// включаемых файлов
#define VC_EXTRALEAN		

// Включаемый файл для MFC
#include <afxwin.h>
#include <afxext.h> 
#include <afxcmn.h>

// Включаемый файл для ресурсов приложения
#include "resource.h"

//============================================================
// Класс CDlgBarApp - главный класс приложения 
//============================================================
class CDlgBarApp : public CWinApp
{
public:
   // Мы будем переопределять метод InitInstance
   virtual BOOL InitInstance();
};
 
// Создаем объект приложение класса CDlgBarApp
CDlgBarApp DlgBarApp;
 
//============================================================
// Класс CDlgBarWindow - представляет главное окно 
//============================================================
class CDlgBarWindow : public CFrameWnd
{
// Определяем панель управления
protected: 
   // Панель управления на основе класса CDialogBar       
   CDialogBar       m_wndDialogBar;
   
protected:
   // Метод OnCreate используется для создания диалоговой 
   // панели управления
   afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);

public:
   // Объявляем конструктор класса CDlgBarWindow
   CDlgBarWindow();

   // Объявляем методы для обработки команд от диалоговой 
   // панелей управления
   afx_msg BOOL DlgBarCommand(UINT nID);
   afx_msg void DlgBarCombo();
   
   // Макрокоманда необходима, так как класс 
   // CDlgBarWindow обрабатывает сообщения
   DECLARE_MESSAGE_MAP()    
}; 

//============================================================
// Метод BarCommand
// Обрабатывает команды, выводит на экран сообщение
//============================================================
BOOL CDlgBarWindow::DlgBarCommand(UINT nID)
{
   CString szCommandAbout;

   // Загружаем текстовую строку с идентификатором, 
   // соответствующим идентификатору поступившего командного 
   // сообщения и выводим ее на экран
   if(szCommandAbout.LoadString(nID))
      MessageBox(szCommandAbout);

   else 
   {
      // Ошибка при загрузке строкового ресурса
      TRACE0("Failed to load string\n");
      return -1;      
   }
   
   return TRUE;
}

//============================================================
// Метод DlgBarCombo
// Обрабатывает команды, выводит на экран сообщение
//============================================================
void CDlgBarWindow::DlgBarCombo()
{
   // Отображаем сообщение о том, что сделан выбор из списка 
   MessageBox("Combo-box selection changed");
}

//============================================================
// Таблица сообщений класса CDlgBarWindow
//============================================================
BEGIN_MESSAGE_MAP(CDlgBarWindow, CFrameWnd)

   // Макрокоманда вызывает метод OnCreate
   ON_WM_CREATE()

//============================================================
   // Обработчики команд от диалоговой панели управления 
   // Командные сообщения от кнопок Set и Clear
   ON_COMMAND_EX(IDC_BUTTON_SET, DlgBarCommand)
   ON_COMMAND_EX(IDC_BUTTON_CLEAR, DlgBarCommand)

   // Командные сообщения от переключателя Alighn 
   ON_COMMAND_EX(IDC_RADIO_LEFT, DlgBarCommand)
   ON_COMMAND_EX(IDC_RADIO_CENTER, DlgBarCommand)
   ON_COMMAND_EX(IDC_RADIO_RIGHT, DlgBarCommand)
   
   // Командные сообщения от списка combo-box
   ON_CBN_SELCHANGE( IDC_COMBO_COLOUR, DlgBarCombo)
   
END_MESSAGE_MAP()

//============================================================
// Метод InitInstance класса CDlgBarApp
// Создает главное окно приложения и отображает его на экране
//============================================================
BOOL CDlgBarApp::InitInstance()
{
   m_pMainWnd = new CDlgBarWindow();
   m_pMainWnd -> ShowWindow(m_nCmdShow);
   m_pMainWnd -> UpdateWindow();

   return TRUE;
}

//============================================================
// Конструктор класса CDlgBarWindow
//============================================================
CDlgBarWindow::CDlgBarWindow()
{ 
   // Создаем окно приложения, соответствующее 
   // данному объекту класса CDlgBarWindow
   Create(NULL, "Dialog Bar", WS_OVERLAPPEDWINDOW,
          rectDefault, NULL); 
}

//============================================================
// Метод OnCreate класса CDlgBarWindow
// Используется для создания панелей управления
//============================================================
int CDlgBarWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   // Вызываем метод OnCreate базового класса
   if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
      return -1;

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

   if (!m_wndDialogBar.Create(this, IDD_DIALOG_BAR, CBRS_TOP,
                              IDD_DIALOG_BAR))
   {
      // Ошибка при создании диалоговой панели управления
      TRACE0("Failed to create dialog bar\n");
      return -1;
   }
   return 0;
}
