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

Японские панели +для фасада подробности здесь. | корм +для кошек премиум купить | led лампа xiaomi Запрос запущен. Идет покупка ссылок 37 н/д 1 н/д android-dv.ru/gadzhety/svet androi | панели для балкона | панели для внутренней отделки |

Обработка сообщений от элементов управления


В окно диалога мы ввели четыре кнопки, при нажатии которых в класс диалогового окна посылается уведомляющее сообщение BN_CLICKED. При изменении данных в окнах редактирования посылаются другие сообщения EN_CHANGE. При воздействии на ползунки также посылаются уведомляющие сообщения, которые мы рассматривали в предыдущей главе. Однако, как было отмечено, ползунки посылают и обычные сообщения (WM_HSCROLL или WM_VSCROLL). Если в окне диалога имеется более одного ползунка, то сообщения от них удобно обработать в одной функции, которая вызывается в ответ на сообщение о прокрутке. Введите в класс CPolyDlg реакцию на WM_HSCROLL, так как наши ползунки ориентированы горизонтально:

void CPolyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)

{

//====== Неинтересное для нас сообщение

if (nSBCode==SB_ENDSCROLL)

return;

//====== Устанавливаем флаг сообщений от ползунков

m_bScroll = true;

//====== Узнаем идентификатор активного ползунка

switch(GetFocus()->GetDlgCtrlID())

{

case IDC_RSLIDER:

//====== Считываем текущую позицию движка

m_nRed = m_rSlider.GetPos();

//====== Синхронизируем поле, редактирования

SetDlgltemlnt(IDC_RED, m_nRed);

break;

case IDC_GSLIDER:

m_nGreen = m_gSlider.GetPos();

SetDlgltemlnt(IDC_GREEN, m_nGreen);

break; case IDC_BSLIDER:

m_nBlue = m_bSlider.GetPos() ;

SetDlgltemlnt(IDC_BLUE, m_nBlue);

break;

}

//====== Снимаем флаг сообщений от ползунков

m_bScroll = false;

}

Сообщения от всех ползунков обрабатываются в одной функции. Идентификатор активного ползунка определяется путем последовательного вызова двух функций GetFocus и GetDlgctrliD, являющихся методами класса cwnd.

Флаг сообщений от ползунков (m_bScroll) понадобился нам для того, чтобы при синхронизации элементов управления не происходили повторные вызовы функций-обработчиков. Дело в том, что при изменении позиции ползунка мы должны привести в соответствие окно редактирования, а при ручном изменении числа в окне редактирования мы должны синхронизировать позицию ползунка.


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