Учебник по Visual C++ .Net


Обработка сообщений от элементов - часть 2


BOOL bSuccess; //====== Попытка преобразовать в число

UINT nSize = GetDlgltemlnt(IDC_PEN, SbSuccess, FALSE);

if (bSuccess && nSize < 101)

{

m_nPen = nSize;

m_pDoc->m_Poly-m_nPenWidth = m_nPen;

m_pDoc->UpdateDrawView();

}

}

Отметьте, что здесь мы намеренно не пользуемся функцией UpdateData, которая провоцирует обмен данными сразу со всеми полями окна диалога, так как хотим показать более экономный способ выборочного (целевого) обмена с помощью функции GetDlgltemlnt. Правда, при таком подходе не работают функции проверки данных типа DDV_ и приходится производить проверку самостоятельно:

void CPolyDlg::OnChangeRed(void) {

//====== Если сообщение спровоцировано ползунком,

//====== то обходим коды его синхронизации

if (!m_bScroll)

{

m_nRed = GetDlgltemlnt(IDC_RED, 0, FALSE);

m_rSlider.SetPos(m_nRed);

//====== Изменяем цвет фона окна редактирования

m_cRed.ChangeColor(RGB(m_nRed, 0, 0));

//====== Корректируем интегральный цвет

UpdateColor();

}

void CPolyDlg::OnChangeGreen(void)

{

if (!m_bScroll)

{

m_nGreen = GetDlgltemlnt(IDC_GREEN, 0, FALSE), m gSlider.SetPos(m_nGreen);

m_cGreen.ChangeColor(RGB(0, m_nGreen, 0)); UpdateColor ();

}

void CPolyDlg::OnChangeBlue(void)

{

if (!m_bScroll)

{

m_nBlue = GetDlglteralnt(IDC_BLUE, 0, FALSE);

m_bSlider.SetPos(m_nBlue);

}

m_cBlue.ChangeColor(RGB(0, 0, m_nBlue));

UpdateColor ();

}

Введите тело вспомогательной функции, которая вычисляет интегральный цвет и вносит изменения, перекрашивая окно диалога IDC_COLOR, и с помощью документа текущий полигон в окне CDrawView:

void CPolyDlg::UpdateColor()

{

COLORREF clr = RGB (m_riRed,m_nGreen,m_nBlue) ;

m_cColor.ChangeColor(clr) ;

m_pDoc->m_Poly.m_BrushColor = clr;

m_pDoc->UpdateDrawView();

}

С помощью Studio.Net введите в класс диалога реакции на уведомляющие сообщения (BN_CLICKED) о нажатии кнопок выбора стандартных геометрий для полигонов (IDCJTRI, IDC_PENT и IDC_STAR). В них мы с помощью техники обратного указателя вновь обращаемся к документу и используем его данные и методы для замены координат точек текущего полигона:




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