Иллюстрированный самоучитель по Visual Studio.Net


Реакция окна на уведомляющие сообщения - часть 3


  1. Откройте шаблон диалога и установите курсор мыши на счетчике (IDC_SPIN).

  2. В окне Properties нажмите кнопку с подсказкой ControlEvents.

  3. В появившемся списке уведомляющих сообщений, которые генерирует счетчик, выберите UDN_DELTAPOS, а в ячейке справа укажите действие — <Add>.

Перейдите в окно LookDlg.cpp и найдите в карте сообщений новый элемент

ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN, OnDeltaposSpin)

который был вставлен инструментом ClassWizard и который означает, что если окну диалога, управляемому классом CLookDlg, придет сообщение UDN_DELTAPOS (Up-Down Notification) от элемента с идентификатором IDC_SPIN, то управление будет передано функции-обработчику OnDeltaposSpin. Теперь в конце файла найдите эту функцию:

void CLookDlg::OnDeltaposSpin(NMHDR *pNMHDR, LRESOLT *pResult)

{

NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;

// TODO: Add your control notification handler code here

*pResult = 0; }

Вот здесь происходит то, о чем было сказано выше. Указатель PNMHDR приводится к типу указателя на более сложную структуру NM_UPDOWN. Это нужно для того, чтобы достать из нее необходимую информацию. Теперь с помощью указателя pNMUpDown мы можем добыть требуемое приращение показаний счетчика (pNMUpDown->iDelta). Вместо комментария // TODO: вставьте следующий фрагмент кода:

//====== Вычисляем желаемую позицию

int nPos = m_Spin.GetPos() + pNMUpDown->iDelta;

//====== Если она вне допустимых пределов, то уходим

if (nPos < 0 || m_nltems <= nPos) return;

//====== Корректируем позицию ползунка

m_Slider.SetPos(nPos);

//====== Расшифровываем код ошибки

Getlnfo(nPos);

//====== Вызываем обмен данными с элементами окна диалога

UpdateData(FALSE);

Здесь уместно напомнить, что Studio.Net 7.0, как и Visual Studio 6, позволяет форматировать введенный текст так, как это принято в сообществе разработчиков. Выделите весь код функции и дайте команду Edit > Advanced > Format Selection или Alt+F8.

В коде мы используем данные (m_Spin, m_nltems, m_Slider) и метод (Getlnfо), которых еще нет в классе, но вы, наверное, имеете некоторый опыт программирования и знаете, что разработка часто идет в обратном порядке.


Начало  Назад  Вперед