Опубликован: 17.08.2010 | Доступ: свободный | Студентов: 999 / 59 | Оценка: 4.11 / 3.89 | Длительность: 29:38:00
Самостоятельная работа 18:

Создание собственного элемента управления ActiveX

Добавление ассоциированных переменных к элементам управления

  • Добавьте для элементов управления диалогового окна приложения ассоциированные переменные в соответствии с таблицей ниже
  • Для каждого элемента управления вызывайте мастер Add Variable через контекстное меню для этого элемента
  • Следите за тем, чтобы флажок Control variable окна мастера быть включен
    Переменные для элементов управления тестового приложения
    Control ID Access Variable t ype Variable name Category Comment
    IDC_MYCLOCKCTRL private CMyclockctrl m_MyClock Control Элемент ActiveX Часы
    IDC_CHECK_BEEP private BOOL m_bCheckBeep Value Включение/Выключение звука ActiveX
    IDC_CHECK_START private BOOL m_bCheckStart Value Включение/Выключение хода часов на экране
    IDC_RADIO_FORE private int m_iSwapColor Value Регулируется цвет текста/фона
    IDC_COMBO_COLOR private CComboBox m_ComboColor Control Для управления списком выбора цвета
    IDC_SHOWINTERVAL private CString m_sShowInterval Value Отображение интервала
    IDC_SLIDER_INTERVAL private CSliderCtrl m_SliderInterval Control Регулирование интервала

Инициализация ассоциированных переменных

Инициализацию ассоциированных переменных выполним в функции OnInitDialog() класса CTestDlg.

  • Откройте файл TestDlg.cpp тестового приложения
  • Найдите и дополните функцию OnInitDialog() следующим кодом
    Дополнение функции OnInitDialog()
    BOOL CTestDlg::OnInitDialog()
    {
      CDialog::OnInitDialog();
    ..........................................
      
      // TODO: Add extra initialization here
      // Переменные для элементов управления тестового приложения 
      m_bCheckBeep = false;
        m_bCheckStart = true;
        m_iSwapColor = 0;
      m_ComboColor.AddString("Черный");
      m_ComboColor.AddString("Синий");
      m_ComboColor.AddString("Зеленый");
      m_ComboColor.AddString("Бирюзовый");
      m_ComboColor.AddString("Красный");
      m_ComboColor.AddString("Сиреневый");
      m_ComboColor.AddString("Желтый");
      m_ComboColor.AddString("Белый");
      m_ComboColor.SetCurSel(0);
      
      long tmp = m_MyClock.GetUpdateInterval();
      m_sShowInterval.Format("%ld", tmp);
      m_SliderInterval.SetRangeMin(1000);
      m_SliderInterval.SetRangeMax(5000);
      UpdateData(FALSE); // Выдать значения на экран
      
      return TRUE;  // return TRUE  unless you set the focus to a control
    }

Построение обработчиков

  • Постройте обработчик для кнопки Выход и заполните его так
    Обработчик для кнопки 'Выход'
    void CTestDlg::OnBnClickedButtonExit()
    {
      // TODO: Add your control notification handler code here
      OnOK();
    }
  • Постройте обработчик для кнопки About Часов и заполните его так
    Обработчик для кнопки 'About Часов'
    void CTestDlg::OnBnClickedButtonAboutclock()
    {
      // TODO: Add your control notification handler code here
      
      m_MyClock.AboutBox();
    }
  • Постройте обработчик для флажка Звуковой сигнал и заполните его так
    Обработчик для флажка 'Звуковой сигнал'
    void CTestDlg::OnBnClickedCheckBeep()
    {
      // TODO: Add your control notification handler code here
    
      // Получить текущее значение от экрана
      UpdateData(TRUE);
      
      // Проверить значение флажка и установить режим Beep
      if(m_bCheckBeep == TRUE)
        m_MyClock.BeepClock(1);
      else
        m_MyClock.BeepClock(0);
    }
  • Постройте обработчик для флажка ' Ход часов ' и заполните его так
    Обработчик для флажка 'Ход часов'
    void CTestDlg::OnBnClickedCheckStart()
    {
      // TODO: Add your control notification handler code here
      
      // Получить текущее значение от экрана
      UpdateData(TRUE);
      
      // Проверить значение флажка и Остановить/Запустить часы
      if(m_bCheckStart == TRUE)
        m_MyClock.StartClock();
      else
        m_MyClock.StopClock();
    }
  • Постройте обработчик для раскрывающегося списка выбора цвета, добавив в проект таблицу цветов и код. Для этого выделите элемент IDC_COMBO_COLOR и в панели свойств найдите событие CBN_SELCHANGE

    Обработчик для раскрывающегося списка
    void CTestDlg::OnCbnSelchangeComboColor()
    {
      // TODO: Add your control notification handler code here
      // Таблица цветов
      COLORREF colors[8] = {
        RGB(  0,   0,   0),
        RGB(  0,   0, 255),
        RGB(  0, 255,   0),
        RGB(  0, 255, 255),
        RGB(255,   0,   0),
        RGB(255,   0, 255),
        RGB(255, 255,   0),
        RGB(255, 255, 255)
      };
      
      // Получить текущее значение от экрана
      UpdateData(TRUE);
      int index = m_ComboColor.GetCurSel();
      if(m_iSwapColor == 0)
        m_MyClock.SetForeColor(colors[index]);
      else
        m_MyClock.SetBackColor(colors[index]);
    }

    Для управления ползунком необходимо связать сообщение Windows WM_HSCROLL с методом OnHScroll() (сообщение WM_VSCROLL и метод OnVScroll() - для вертикальных ползунков.

  • Постройте обработчик для ползунка. Для этого выделите форму IDD_TEST_DIALOG
  • Перейдите в панель Properties и установите режим Messages
  • Найдите сообщение WM_HSCROLL и создайте для него обработчик OnHScroll()

  • Обработчик заполните следующим кодом
    Обработчик для ползунка
    void CTestDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
    {
      // TODO: Add your message handler code here and/or call default
      
      int pos = m_SliderInterval.GetPos();
      m_sShowInterval.Format("%d", pos);
      UpdateData(FALSE);
      m_MyClock.SetUpdateInterval((long)pos);
      
      CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
    }
  • Оформите About тестового приложения
  • Постройте приложение и убедитесь в правильности его работы

Внешний вид приложения должен выглядеть примерно так



Александр Даниленко
Александр Даниленко
Стоит Windows 8 Pro, Visual Studio 2010 Express Edition .